Web sockets多次请求

3
我将尝试解释web sockets的工作方式。我基本上了解,在web sockets中,与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个回答

4
当您发送多个请求时,比如reqA, reqB, reqC,使用HTTP协议,服务器必须按照相同的顺序响应这些请求 resA, resB, resC(假设已打开keep-alive,请参见规范)。然后浏览器就知道哪个响应是哪个请求的。
但使用WebSockets时,您必须手动编写此代码。也有其他选项。例如,其中一个有趣的想法是使用事件系统。服务器将以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,或者自己实现,就像这里一样:

在我的对象中实现事件


正是我所需要的。一旦我实现了我的解决方案,我会回帖的。谢谢。 - fe-ninja
我敢打赌肯定有人之前已经做过这个了,你知道一些 Github 仓库吗? - fe-ninja
@fe-ninja 我认为 Socket.IO 使用类似的思路(但它与服务器端集成)。我不知道有没有仅限于客户端的库。嗯,这本来就不难。 - freakish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接