ADOBE® MEDIA SERVER 5.0.3
デベロッパーズガイド
![]() ![]() ![]() |
翻訳:株式会社サムライズ |
---|
注意
Adobe Media Server® バージョン 5についての本ドキュメントは第三者によって翻訳されたものであり、Adobe Systems Incorporated(アドビ システムズ社)は本翻訳物の正確性や完全性を査閲していません。
Accessプラグインの開発
重要:サーバーのすべてのエディションで Access プラグインがサポートされています。しかし、Access プラグインは、RTMFP 接続上ではサポートされません。
Accessプラグインの開発の詳細については、Denis Bulichenko による「Using plug-ins to configure and optimize Flash Media Server 4.5」を参照してください。
Accessプラグインによって、セキュリティの層がもう 1つサーバーに追加されます。この層では接続要求をインターセプトし、要求がサーバーのスクリプト層に到達する前にクライアントとサーバーを検査して、要求の受諾、拒否またはリダイレクトのいずれの処理を行うかを決定します。使用できる Accessプラグインは 1つだけです。
サーバーに接続されているユーザー数や帯域幅の使用量などの基準に従って、接続要求の受諾、拒否またはリダイレクトを行うように、プラグインをコーディングすることができます。
また、組織のユーザーとパスワードのデータベースに対しクエリーを実行して、どの接続要求を許可するかを決定することができます。プラグインが接続を受諾すると、サーバーに対するそのユーザーのアクセス記録でデータベースを更新することができます。
サーバー上のファイルやフォルダーに対する読み取りおよび書き込みアクセスの設定、オーディオやビデオビットマップデータに対するアクセス権限の設定およびクライアントプロパティの検査を行うことができます。
関連項目
Adobe Media Server プラグイン API 参照
インストールされた Accessプラグインは、サーバーの起動時にコンテキストポインターを使用して初期化されます。コンテキストポインターとプラグインポインターは、Accessプラグインとサーバーの間に双方向通信を提供します。
クライアントがサーバーへの接続を試みると、サーバーは Accessプラグインが存在するかどうかを確認します。Accessプラグインが使用できる場合、このプラグインが接続要求を検査して、接続の許可、拒否またはリダイレクトを行います。Accessプラグインが使用できない場合、接続要求は通常通り進行します。
注意:インストールされたサーバーごとに、Access プラグインを 1 つだけ使用できます。
Accessプラグインと Authorizationプラグインはいずれも、サーバーへの接続を許可するために使用できます。ただし、それぞれのプラグインは異なる場所で実行され、接続プロセス内の異なる段階でアクティブになります。
新しい接続がエッジプロセス(amsedge)に到達し、接続メッセージ内のデータは(エッジプロセスで動作する)Accessプラグインに送信されます。この段階でプラグインは、IPアドレス、SWFファイルの元の URL、接続(または「ターゲット」)URI、ユーザーエージェントなど、クライアントに関する情報を保持しています。この情報を使用して、Accessプラグインは接続の受諾、拒否またはリダイレクトを行ったり、ターゲット URIを書き換えたりすることができます。ターゲット URIを書き換えると、接続先が別の vhost、アプリケーションまたはアプリケーションインスタンスに強制的に変更されます。アダプターへのソケットレベルの接続が既に行われているので、プラグインは接続先を別のアダプターに書き換えることはできません。
外部からの接続の接続先を別の vhost、アプリケーションまたはアプリケーションインスタンスに強制的に変更するには、 Accessプラグインを使用する必要があります。Authorizationプラグインに通知された時点では、ターゲット URIを書き換えるには遅すぎます。また、Accessプラグインは接続プロセスの早い段階で動作するので、接続をスクリーニングするには、このプラグインを使用するのが最も効率的です。許可の動作をできるだけ軽量にするためには、接続 URIを書き換える必要がなくても、Accessプラグインを使用してください。
Authorization プラグインは、接続がアプリケーションに転送された後は、コアプロセス(amscore)で動作します。 Authorization プラグインは、クライアントによるアプリケーションへの接続試行を受諾、拒否またはリダイレクトすることができますが、接続先を別の URI に書き換えることはできません。
注意:接続のリダイレクトは、接続 URIの書き換えとは異なります。クライアントをリダイレクトすると、新しい URIを含むリダイレクトメッセージがクライアントに返されて、現在の接続が終了します。すると、クライアントは新しい URIへの接続を試みます。
アドビが提供したサンプルのAccessプラグインファイルのコードを変更したり、独自のプラグインを作成したりすることができます。
クライアント接続要求は、Accessプラグインの onAccess()コールバック関数をトリガーします。接続要求を検査し、クライアントプロパティを変更し、onAccess()コールバック関数による要求を受諾、拒否、またはリダイレクトするコードを記述します。
クライアントフィールドに対するクエリーを実行するには、getValue() を呼び出します。クライアントフィールドを変更するには、setValue() を呼び出します。フィールドの一覧については、『Adobe Media Server プラグイン API 参照』の「fms_access」名前空間を参照してください。接続元の SWF ファイルまたはサーバーの URL であるフィールド x-page-urlが、Flash Media Server 3.5 に追加されました。
サーバーの統計 eTOTAL_CONNECTED、eBYTES_IN および eBYTES_OUT に対してクエリーを実行するには、getStats() を呼び出します。
フィールドに対してクエリーを実行し、接続ロジックを記述した場合は、accept()、reject()または redirect()を呼び出して、サーバー上のアプリケーションに対するクライアントの接続を許可または拒否します。
コアプロセスにはアプリケーションを動的に割り当てることができます。この機能は、CPU消費量および記録済みメディアのキャッシュサイズなどのリアルタイムのパフォーマンスカウンタに基づいて、複数のコアプロセスに負荷を分散する場合に使用します。この機能は、特定のユーザーにに対して、高いサービス品質(QoS)を提供する場合にも使用することができます。
どのコアプロセスがアプリケーションを処理するかを指定するには、"coreIdNum"フィールドとコア番号を setValue()関数に渡します。コア番号は任意の正の整数でありえます。サーバーは core_number % number_of_ coresという式を使用して、使用するコアプロセスを決定します。例えば、次のコードでは、コア番号 3 が割り当てられます。
char* coreId = "3";
if(!setValue("coreIdNum", coreId)) {
FILE * pFile = fopen ("error.log","a");
fprintf(pFile, "Core id = %s", coreId);
}
次のように getValue()を呼び出すと、クライアント接続が割り当てられているコアプロセスを特定することができます。
const char* coreId = getValue("coreIdNum");
FILE * pFile = fopen ("output.txt","a");
fprintf(pFile, "Core id = %s", coreId);
負荷分散
Access プラグインを使用して、CPU の使用状況や記録メディアのキャッシュサイズなど、パフォーマンス基準を監視し、それらの基準に応じて負荷分散を実行するようにコーディングできます。複数のコアプロセスに対するアプリケーションの分散は、Application.xml の numprocs および scope エレメントで定義されます。例えば、numprocs を 3 に、scope を application に設定すると、各アプリケーションでは 3 つのコアプロセスで外部からの接続が処理されます。コアプロセスが過負荷である場合は、過負荷になっているコアプロセスに外部からの新たな接続が送信されないようにする、Access プラグインを開発することができます。1 つの方法として、次のことを実行するプラグインコードを記述します。
1 各コアプロセスの統計を追跡します。Administration API である getFileCacheStats()、getAppStats()、getInstanceStats() を使用します。
2 新しいクライアントが接続した場合には、コアプロセスが過負荷になっていないかどうかをプラグインコードで判断する必要があります。過負荷になっている場合は、過負荷になっていない別のプロセスのコア IDをプラグインコードで判断し、新しい接続をそのプロセスに送信します。
サービス品質(QoS)
特定のクライアントに対する QoSを高めるには、そのクライアントだけに特定のコアプロセスを使用することができます。
例えば、コンテンツへのアクセスについてプレミアムサブスクリプション料金を支払っている特定のクライアントに、可能な限り最高度のパフォーマンスを提供するとします。この場合は、6 つのコアプロセスにアプリケーションを分散して各プロセスの統計を監視する Accessプラグインを開発できます。クライアントによっては、異なるコアプロセスがアプリケーションに対する接続を処理します。3 つのコアプロセスが上位のクライアントに対して予約され、残り 3 つのコアプロセスがその他すべてのクライアントに割り当てられます。このプラグインは、各プロセスの統計を監視します。特定のプロセスが過負荷になると、Accessプラグインによって、過負荷になっているプロセスが新しい接続を処理することが防止されます。このプラグインは、処理能力があるプロセスに新しい接続をルーティングできます。
Application.xml設定ファイルの Accessセクションを使用すると、Accessプラグインのフォルダーレベルの権限を設定できます。この設定ファイルは、各仮想ホストディレクトリにあります。また、アプリケーションディレクトリにもある可能性があります。FolderAccessエレメントが trueに設定されている場合、Accessプラグインの readAccessおよび writeAccess フィールドを使用して個々のファイルに対する権限を設定することはできません。設定できるのはフォルダーレベルの権限だけです。デフォルト値は falseで、次のように個々のファイルに対する権限を設定することができます。
<!-- Controls libconnect.dll access configurations -->
<Application>
...
<Client>
...
<Access>
<FolderAccess>false</FolderAccess>
</Access>
...
...
</Application>
最終更新日 2013/9/30