【问题标题】:Web sockets multiple requestsWeb 套接字多个请求
【发布时间】:2013-05-20 18:52:23
【问题描述】:

我正在尝试了解网络套接字的工作原理。我确实有基本的了解,与 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 设置一样?

如果有人能指导我正确的方向,给我一个例子或教程链接,我将不胜感激。

有人吗?

【问题讨论】:

    标签: javascript websocket socks


    【解决方案1】:

    问题是,当你使用 HTTP 发送多个请求时,比如reqAreqBreqC,那么服务器必须以相同的顺序响应这些请求resAresB、@ 987654329@(这是假设keep-alive 已开启,请参阅the specification)。然后浏览器就知道哪个响应对应哪个请求。

    但是使用 WebSockets,您必须手动编写此代码。还有其他选择。例如,一个有趣的想法是使用 event 系统。服务器将接受表单中的 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,或者您可以自己实现它,例如这里:

    Implementing events in my own object

    【讨论】:

    • 正是我想要的。一旦我实施我的解决方案,我会发回。谢谢
    • 我敢打赌之前一定有人这样做过,你知道一些 github repos 吗?
    • @fe-ninja 我认为 Socket.IO 使用了类似的想法(但它与服务器端集成)。我不知道有任何仅用于客户端的库。嗯,一开始并不难。
    猜你喜欢
    • 2018-11-28
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2011-03-16
    相关资源
    最近更新 更多