Amf
それでは、AMFとは何ですか? バイクという言葉を再発明することはせず、ウィキに助けを求めます。
AMF (Action Message Format)は、アクションスクリプトで記述されたアプリケーションで使用されるバイナリデータ交換フォーマットです。 Simple Object Access Protocolに基づいて構築され、主にAdobe Flashとデータベース間の情報交換に使用されます。 Action Message Formatは、XMLよりもトラフィックが経済的であり、型指定されたオブジェクトを転送できます。 2007年12月13日発表
現時点では、AMFはフラッシュアプリケーションとサーバー側の間で最も関連性の高いデータ転送形式です。 AMFを操作するためのライブラリは、ほぼすべてのサーバー言語用に存在しますが、今日はPHPについて説明します。
AMFPHP対 Zend AMF
アプリケーションのサーバー部分としてPHPを選択したら、今後この形式で使用するパッケージを決定する必要があります。 現時点では、最も関連性の高いプロジェクトが2つあります。AMFPHPとZend AMFです。 2つの製品に大きな違いはないので、それは好みの問題ですが、私はプロジェクトにAMFPHPを選択しました。
- 軽量でコンパクトです。
- これは独立したプロジェクトであり、フレームワークの一部ではありません。
- テスト結果によると、AMFPHPは競合他社より少なくとも3倍高速です
- 私はそのようなZendが好きではありません
はじめに
これはAMPHPのマニュアルであり、AMF全体ではないため、サーバー部分に直接焦点を当てます。 さらに、ほとんどの場合、フラッシュはサーバー上のどんな種類の獣にも関係ありません。すべてのリクエストはAMF形式に共通するため、ネットワーク上の多数の関連資料です。
プロジェクトのルートがWebサーバーのルートであるとします。 私のマニュアルでは、それを/と指定します。 最初にすべきことは、安定版のAMFPHPをダウンロードし(この記事を書いている時点ではバージョン1.9です)、 / amfphpでアーカイブを解凍することです。
ここで、少しセットアップする必要があります。 これを行うには:
- /amfphp/globals.phpファイルの$ servicesPathおよび$ voPath変数で 、それぞれ/ amfphp / servicesおよびamfphp / services / Voフォルダーへのフルパスを指定します。
- ファイル/amfphp/gateway.phpで 、メソッドへのアピールを探します$ gateway-> setCharsetHandler(); 最初の引数として「なし」を設定します(この場合、他の2つは関係ありません)
デフォルトゲートウェイ
ここで、クライアント側からのすべてのAMFリクエストが送信される先として、getwayを作成する必要があります。 もちろん、標準の/amfphp/gateway.phpで取得できますが、呼び出す前にアプリケーションを設定する必要があります(クラスの初期化、データベースへの接続など)
次のようなもので/gateway.phpファイルを作成します。
<?php
// ROOTディレクトリ
define ( 'ROOT' 、 '/ var / www / html /' ) ;
//タイムゾーン
date_default_timezone_set ( 'Europe / Moscow' ) ;
//クラスをロードします
ROOTが必要です 。 'loader.php' ;
// amfphpをロードします
require_once ROOT 'amfphp / gateway.php' ;
これで、すべてのブートアクションを/loader.phpで実行できます。
サービスとVOクラス
すべてのサービスは/ amfphp / servicesフォルダーに保存されます。 プロジェクトがMVCアーキテクチャを含意している場合(ただし、この場合Vはあまり適切ではありません)、サービス自体がコントローラーとして機能できます。 これらのコントローラーサービスは、任意のクラスから継承できます(これはマッピングに影響しません)。その助けを借りて、モデルやアプリケーションの他のメソッドやデータへのアクセスを整理できます。 ServiceName.MethodNameという形式のAMFリクエストは、ServiceNameクラスのMethodName()メソッドに送信されます。このメソッドは、ファイル/amfphp/services/ServiceName.phpに記述されている必要があります
VO ( Value Object )クラスは、ASとアプリケーションのサーバー側の間のマッピングに使用できるクラスです。 すべてのVOクラスは、 / amfphp / services / Voフォルダーに配置する必要があります。 サーバー側でオブジェクトを作成するには、ファイルを手動でインクルードする必要がありますが、AMFリクエストに付属するクラスの説明を含むファイルは自動的にロードされます。 しかし、すばらしい__autoload()関数を使用すると、これらの質問はすべて消えます。
<?php
関数 __autoload ( $ class )
{
if ( file_exists ( ROOT 。 'amfphp / services / Vo /'。$ class 。 '.php' ) ))
{
// VO
ROOTが必要です 。 'amfphp / services / Vo /' $クラス 。 '.php' ;
trueを 返し ます 。
}
他に
{
//エラー
新しい例外をスローします( 'クラス\' ' 。 $クラス 。 ' \ '位置を特定できませんでした!' ) ;
falseを 返し ます 。
}
}
UserDataVOクラスをクライアントに送信する必要があるとします。 これを行うには、次の内容の/amfphp/services/Vo/UserDataVO.phpファイルを作成します。
<?php
クラス UserDataVO
{
//明示的なタイプ
var $ _explicitType = 'UserDataVO' ;
//ここにいくつかのユーザーデータ...
}
そしてもう1つの重要なポイント。 クライアント側のVOクラスの名前にピリオドが含まれている場合、amfphpはからスラッシュに変換します。 これは、ASクラスapp.Vo.UserDataVOが/amfphp/services/Vo/app/Vo/UserDataVo.phpファイルに次のように記述されることを意味します。
<?php
クラス UserDataVO
{
//明示的なタイプ
var $ _explicitType = 'app.Vo.UserDataVO' ;
//ここにいくつかのユーザーデータ...
}
explict型にはクラスの完全な名前が含まれていますが、phpクラス自体の名前は最後の部分にすぎないことに注意してください。
それだけです この記事は、AMF全般、特にAMFPHPに最初に出会った開発者にとって役立つと思います。 ご清聴ありがとうございました。