Web套接字多个请求

时间:2013-05-19 13:15:15

标签: javascript websocket socks

我正在尝试了解网络套接字的工作原理。我确实有基本的理解,与Web套接字中的AJAX不同,连接总是打开的,这对于实时应用程序来说非常方便。

这是使用socks的基本示例:

   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设置一样?

如果有人可以指导我纠正方向,给我一个示例或教程链接,我将不胜感激。

任何?

1 个答案:

答案 0 :(得分:3)

当您发送多个请求时,问题是reqAreqBreqC,那么服务器必须以相同的顺序响应这些请求{{1 }},resAresB(假设resC已开启,请参阅the specification)。然后浏览器知道哪个请求响应。

但是使用WebSockets,您必须手动编写此代码。还有其他选择。例如,一个有趣的想法是使用事件系统。服务器将接受

形式的JSON数据
keep-alive

它会以相同的形式向客户发送数据。在这种情况下,你可以这样做:

{
  "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 }); 。为此你可以使用现有的一个实现,比如Backbone.js,或者你可以自己实现它,就像这里:

Implementing events in my own object