2

ZendAMP php と Flex (Flash Builder 4) を使用しています。これはうまく機能しますが、フレックス アプリケーションと ZendAMF の間のトラフィックを調べていると、コード内で通信を要求していないにもかかわらず、パケットが移動していることに気付きました。

たとえば、これは私のサービスがフレックスでどのように見えるかです:

var activityLogService:RemoteObject = new RemoteObject("zend");
activityLogService.showBusyCursor=true;
activityLogService.endpoint="http://myserver:80/amf/";
activityLogService.source="ActivityLogService";

次に、addlistener をセットアップした後、 activityLogService.getRecord(myPassedParams) のようなものを呼び出します。

フィドラーなどを使用してネットワーク トラフィックを監視すると、要求と応答が戻ってくることがわかります。

ただし、zend サービス オブジェクトの名前が含まれていない次の要求パケットも表示されます。

�����null�/1����
���
�Mflex.messaging.messages.CommandMessageoperationcorrelationIdmessageIdtimeToLivetimestampdestinationheaders    bodyclientIdI3961D727-35B9-F41C-713A-AA42625FCFD9��

%DSMessagingVersion DSIdnil

戻ってくる応答もかなりあいまいです。

�����
/1/onResult������
�Uflex.messaging.messages.AcknowledgeMessagecorrelationIdclientIddestinationmessageIdtimestamptimeToLiveheaders bodyI3961D727-35B9-F41C-713A-AA42625FCFD9I53D9441D-E1DC-4829-9B3F-000040DA9368I1322EAF2-B588-9929-0AC4-000013A22D80131282149600�

これらは単なる「キープアライブ」メッセージですか?

もしそうなら、それらをオフにする方法はありますか?

また、もしそうなら、サーバー側である種のセッションを維持するためにそれらを使用できる方法はありますか(おそらくそれが目的です)?

4

1 に答える 1

0

RemoteObject AMF 実装では、サーバー側の実装がステートフルである必要があります。これはプロトコルの一部として定義されているため、どのバックエンドと話しているかは問題ではありません (つまり、私の経験は BlazeDS、LCDS、および WebOrb ですが、PHP でも同じはずです)。

DSidアプリケーションは、RemoteObject に対して最初の AMF 呼び出しを行うときに、クライアントに値が設定されているかどうかを確認します。これは基本的に、サーバーに対してフレックス クライアントを識別する一意の ID です。

そうでない場合は、新しい を取得するための呼び出しが発行され、DSidその呼び出しが戻るまで、すべての発信呼び出しが中断されます。それ以降DSidは、AMF パケットのヘッダー内のすべてのアウトバウンド コールに渡されます。

クライアントで DSid をリセットすると、( を呼び出してFlexClient.getInstance().id = 'nil') このプロセスが繰り返されます。(つまり、サーバーがクライアントに新しいを発行するまで、すべての呼び出しが再度中断されDSidます。)

基本的に、これらは AMF プロトコルが機能するために必要な内部メッセージです。

于 2011-08-15T21:00:00.933 に答える