2011-08-08 13 views
2

私はZendAMP phpとFlex(Flash Builder 4)を使用しています。素晴らしいことですが、フレックスアプリケーションとZendAMFとの間のトラフィックを見ているときに、コード内で通信を要求していなくてもパケットが移動していることに気づきました。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� 

は、これらはほんの一部です「生き続ける」メッセージのようなもの?

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

もしそうなら、サーバー側で何らかの種類のセッションを生き残るために使用できる方法がありますか?

+0

あなたはどのようにリクエストを見ている仕事にAMFプロトコルのために必要な内部メッセージですか?すべてのリクエストがFlexアプリケーションから来て、サーバーをターゲットにしていることを確認してください。例えば、私がserviceCaptureとtweetdeckを持っているなら、私が走っている可能性のあるFlexアプリケーションとはまったく無関係のトラフィックがたくさんあると思う。 – JeffryHouser

+0

fiddler2というプログラムを使用します。私はアプリケーションからだと知っているので、それはhttp urlを表示し、パスは/ amf /であり、私が送信する通常のリクエストと同じです。リクエストを送信する前に、これらのパケットを2つ送信するように見えることに気付きました。再び、セッションやハンドシェイクのようなものです。 –

+0

これは私にとっては珍しいことです。しかし、私は何が起こっているのか正確にはわかりません。私は自分の発展の中でこれを見ていません。 – JeffryHouser

答えて

0

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

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

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

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

は基本的に、これらは

+0

私は一見すべての要求のための2つの呼び出しを得ているので私はこれを再訪問している!私はDSId nillで毎回小さなリクエストを見る。次の(実際の)リクエストでは、それでもDSId nillが表示されますが、その中に "DSEndpoint zend"もあります。それはうまく動作しますが、かなり遅くなります。私は肯定的です。私はgetInstanceをnilに設定していません。それで、dsidを消去する別の方法がありますか、それが設定されて保存されていることを確認する必要がありますか? –

関連する問題