4

FlashはAMFを介してサーバー上のサービス/スクリプトとどのように通信しますか?

.NET/Javaよりも開発が容易なPython/Perl / PHP用のAMFライブラリについて:

  • Flashがリモートプロシージャコールを送信するたびに、スクリプトファイルを実行しますか?
  • または、サービスとして実行されているスクリプトクラスと、ソケットを介して通信しますか?

典型的なAMF機能について:

  • データはどのように転送されますか?自動的にシリアル化されるのはメソッド引数によるものですか?
  • サーバーはどのようにしてクライアントに「プッシュ」できますか?Flashムービーはソケットに接続する必要がありますか?

御時間ありがとうございます。

4

2 に答える 2

8

私がよく知っている唯一の AMF ライブラリはPyAMFです。PyAMF に関する質問への回答は次のとおりです。

  • スクリプトとして実行できると思いますが(CGIのようにということですか?)、最も簡単なIMOは、AMFリクエスト専用のアプリサーバーをセットアップすることです

  • 最も簡単な方法は、ピュア python で関数を定義することです。これは、PyAMF がラップして、受信/送信 AMF データをシリアル化します。

  • 必要な場合はソケットを介して通信できますが、繰り返しになりますが、純粋な Python 関数を使用するのが最も簡単です。ソケットの用途の 1 つは、開いた接続を維持し、データをクライアントに「プッシュ」することです。この例を参照してください。

で提供される 3 つの単純な AMF サービスの例を次に示しますlocalhost:8080

from wsgiref import simple_server
from pyamf.remoting.gateway.wsgi import WSGIGateway

## amf services ##################################################

def echo(data):
    return data

def reverse(data):
    return data[::-1]

def rot13(data):
    return data.encode('rot13')

services = {
    'myservice.echo': echo,
    'myservice.reverse': reverse,
    'myservice.rot13': rot13,
}

## server ########################################################

def main():
    app = WSGIGateway(services)

    simple_server.make_server('localhost', 8080, app).serve_forever()

if __name__ == '__main__':
    main()

私は間違いなくPyAMFをお勧めします。をチェックして、その機能とコードがどのように見えるかを確認してください。

于 2009-09-14T17:19:40.073 に答える
4

Flash は、AMF を介してサーバー上のサービス/スクリプトとどのように通信しますか?

データは TCP/IP 接続を介して転送されます。既存の HTTP 接続が使用される場合もあれば、AMF データ用に新しい TCP/IP 接続が開かれる場合もあります。HTTP または追加の TCP 接続が開かれると、ソケット インターフェイスが使用される可能性があります。AMF は間違いなくある種の TCP 接続を介して移動し、ソケット インターフェイスはそのような接続を開くための実質的に唯一の方法です。

転送される「データ」は、「整数」、「文字列」、「オブジェクト」などの ECMA スクリプト (Javascript(tm)) のデータ型で構成されます。

オブジェクトをバイナリにエンコードする方法の技術仕様については、Adobe が仕様を公開しています: AMF 3.0 Spec at Adob​​e.com

一般に、AMF を使用するクライアント/サーバー システムは次のように動作します。

  1. クライアントはユーザー インターフェイスを表示し、サーバーへの TCP 接続を開きます。
  2. サーバーはクライアントにデータを送信し、クライアントはユーザー インターフェイスを更新します。
  3. ユーザーがコマンドを実行すると、クライアントは TCP 接続を介してサーバーにデータを送信します。
  4. ユーザーが終了するまで、手順 2 ~ 3 を続けます。

たとえば、ユーザーが UI で「メールを送信」ボタンをクリックすると、クライアント コードは次のようになります。

public class UICommandMessage は my.CmdMsg を拡張します
{
   public function UICommandMessage(action:String, arg: String)
   {
      this.cmd = アクション;
      this.data = 文字列;
   }
}

じゃあ後で:

UICommandMessage msg = new UICommandMessage("Button_Press", "Send_Mail");
server_connection.sendMessage(msg);

サーバーコードでは、サーバーは着信AMFオブジェクトの接続も監視しています。メッセージを受信し、適切な応答関数に制御を渡します。これを「メッセージを送信する」と呼びます。

あなたが達成しようとしていることについてより多くの情報があれば、より有用な詳細を提供できます.

于 2009-10-12T22:13:36.927 に答える