0

最初にサーバーからの AJAX 呼び出しを介して要求され、次に autobahnjs サブスクリプション (変更通知を受け取る) をリッスンして更新される Web ブラウザーにアイテムのリストを表示しています。

一部のアイテム (ジョブのリスト。数百ミリ秒で完了する場合もあれば、かなり時間がかかる場合もあります) は、Web ページの読み込み時に更新される場合があります。これは、新しいジョブが送信された直後にジョブ リストが表示されるためです。

私の問題は、サブスクリプションがいつアクティブになるかわからないことです。そのため、AJAX 応答を受け取った後、サブスクリプションがアクティブになる前に、アイテム リストが変更されることがあります (その結果、アイテムは更新されません)。

AJAX 呼び出しの前にサブスクリプションを開始しても、問題は部分的にしか解決されません。これは、アイテム リストがサブスクリプションによって以前に発生した変更を上書きする可能性があるためです。これを行うには、サブスクリプションがいつアクティブになるかを確認する必要もあります。

4

1 に答える 1

1

RPC と PubSub の両方でWAMPを実行するAutobahnベースのスタック (単一サーバー ノード)では、1 つのオプションは次のようになります。

var listInitialized = false;

session.subscribe("http://myapp.com/onListChange",
   function (topic, event) {
      if (listInitialized) {
         // update list
      }
   }
});

session.call("http://myapp.com/getList").then(
   function (res) {
      // initial fill of list
      listInitialized = true;
   }
);

subscribeと の両方がcall単一の WAMP 接続で実行されるため (そして、その接続は順序付けられた WebSocket/TCP トランスポートです)、アウトバーン サーバーはサブスクリプションをセットアップし、呼び出しが処理される前にイベントを配信します。そのサブスクリプションは、呼び出しが戻る前に到着するイベントを生成する可能性がありますが、これらはフラグを介して無視されます。その後、呼び出しが返され、結果が処理されると、後続のイベントがクライアントによって処理されます。

于 2013-12-11T09:59:01.953 に答える