我正在尝试了解网络套接字的工作原理。我确实有基本的理解,与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设置一样?
如果有人可以指导我纠正方向,给我一个示例或教程链接,我将不胜感激。
任何?
答案 0 :(得分:3)
当您发送多个请求时,问题是reqA
,reqB
,reqC
,那么服务器必须以相同的顺序响应这些请求{{1 }},resA
,resB
(假设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,或者你可以自己实现它,就像这里: