2

Web ソケットの仕組みを理解しようとしています。WebソケットのAJAXとは異なり、接続は常に開いているため、リアルタイムアプリケーションに便利であるという基本的な理解があります。

これは、靴下を使用した非常に基本的な例です。

   var sock = new SockJS('http://mydomain.com/my_prefix');

   sock.onopen = function() {
       console.log('open');
   };

   sock.send("request to send (JSON)");

   sock.onmessage = function(e) {
       console.log('message', e.data);
   };

   sock.onclose = function() {
       console.log('close');
   };

要件:リアルタイム データを表示する複数のウィジェットがあるため、各ウィジェットを JSON 要求/サービスにサブスクライブし、接続を開いたままにし、必要に応じてサブスクライブを解除する必要があります。

質問:この場合、通常の AJAX セットアップの場合と同様に、複数のリクエストをどのように処理しますか?

誰かが私を正しい方向に導き、例またはチュートリアルへのリンクを教えていただければ幸いです。

誰?

4

1 に答える 1

3

問題は、HTTP を使用して複数のリクエストを送信すると、reqAサーバーはこれらのリクエストに同じ順序で応答する必要があることです。ブラウザは、どのレスポンスがどのリクエストに対するものかを認識します。reqBreqCresAresBresCkeep-alive

ただし、WebSocket では、このコードを手動で記述する必要があります。他のオプションもあります。たとえば、興味深いアイデアの 1 つは、イベントシステムを使用することです。サーバーは JSON データを次の形式で受け入れます。

{
  "event": "test",
  "data": ["foo"]
}

同じ形式でクライアントにデータを送信します。この状況では、次のようなことができます。

var EventManager = // some code here;
sock.onmessage = function(e) {
  var msg = JSON.parse(e.data);
  EventManager.trigger(msg.event, msg.data);
};

するだけでイベントに登録できます

EventManager.on("test", function(data) {
  // handle "test" event here
});

もちろん、実装する必要がありますEventManager。そのためには、Backbone.jsなどの既存の実装の 1 つを使用するか、次のように独自に実装することができます。

自分のオブジェクトにイベントを実装する

于 2013-05-20T10:31:19.233 に答える