2013-05-19 48 views
1

我想了解Web套接字如何工作。我确实有一个基本的理解,即与web插座中的AJAX不同,连接总是打开,这对实时应用程序很方便。Web套接字多个请求

这是非常基本的例子使用袜子:

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

我会很感激,如果有人能指导我正确的方向,给我一个例子或指南的链接。

有人吗?

回答

2

的事情是,与当你发送多个请求,说reqAreqBreqC,那么服务器必须响应以相同的顺序这些请求resAresBresC(这是在假设keep-alive是HTTP ,参见the specification)。然后浏览器知道哪个请求是哪个响应。

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

{ 
    "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也可以实现它自己的,喜欢这里:

Implementing events in my own object

+0

正是我一直在寻找。一旦我实施我的解决方案后,我会回复。谢谢 –

+0

我敢打赌,以前有人必须这样做,你知道一些github回购? –

+0

@ fe-ninja我认为Socket.IO使用类似的想法(但它与服务器端集成)。我没有意识到任何客户端的唯一库。那么,首先这并不难。 – freakish