【问题标题】:Lightweight alternative to socket.io for transport only仅用于传输的 socket.io 的轻量级替代品
【发布时间】:2012-08-14 23:02:24
【问题描述】:

是否有一个轻量级的替代 socket.io 仅用于传输?

我有一个 node.js 应用程序,它仅使用 socket.io 作为消息传输。我的应用程序自己管理会话和消息路由,我只是使用 socket.io 进行传输——websocket + 旧浏览器的默认回退。

新版本的socket.io似乎越来越重了,现在支持redis,我完全不需要。

【问题讨论】:

  • +1,但是如果你正在寻找一些东西来回退到 websockets 以外的东西进行传输,那么你正在使用大量的 Socket.IO,我认为你不会找到任何东西满足这种需求的打火机。
  • 想一想,我的应用程序是针对客户端的移动设备,所以我真的不需要后备。如果我以后需要,我可能可以自己实施后备。

标签: node.js websocket socket.io


【解决方案1】:

还有其他选择。 faye - http://faye.jcoglan.com/ 就是其中之一。它类似于 socket.io,但使用Bayeux 协议。另一个如果你不想运行服务器 - pusher - http://pusher.com/

【讨论】:

  • 还有 Ably 以及 ably.io,就像 Pusher,但专注于为开发人员提供强大的发布/订阅流 API,具有协议互操作性和数据完整性。 注意:我是联合创始人,但相信这仍然是一个有用的评论
  • 如果 Pusher 和 Ably 对你来说都太贵了,试试PieSocket。我们一直在我们所有的系统上使用它。
【解决方案2】:

看看sock.js - 它试图实现跨浏览器的websockets api,仅此而已。

【讨论】:

    【解决方案3】:

    ws 模块速度惊人(查看benchmarks),经过充分测试,非常非常轻量级,但如果没有,您必须自己做后备,另外,它没有事件发射器在它之上。但是,如果这是您想要的,那么仅在运输方面就很棒。如果你想要一个穷人的“会话”,只需在 ws 对象上附加一些东西,如下所示:

    var WebSocketServer = require('ws').Server
    var wss = new WebSocketServer( /* some config */);
    wss.on('connection', function(ws) {
        ws.on('message', function (message) {
            try {
                var obj = JSON.parse(message) // using JSON  over the conversation
            } catch (err) {
                var obj = {};
                console.log('probably not valid json');
            }
            switch (true) {
                case obj.name !== undefined:
                    ws.name = obj.name; // Here's the poor man's session variable
                    ws.send('Hello '+ws.name);
                break;
            }
        });
    });
    

    现在唯一缺少的就是它上面的事件发射器......

    【讨论】:

    • 我现在正在尝试“ws”。 “ws”实际上是 socket.io 在后台使用的。缺点是我需要实现自己的后备。但是,鉴于我的应用程序是围绕类似 WebSocket 的通信设计的,我宁愿获得细粒度的控制。
    • 和我一样。在一两年内,将近 95% 以上的网络浏览器将支持网络套接字。
    • 现在,websockets 的最大问题似乎是企业防火墙(端口 80/443 上的透明反向代理)。 :-/
    • 我发现如果你通过 443 端口,即使不使用 SSL,防火墙也不会妨碍
    • 如果您需要一个库来包装原生 WebSocket 并为您提供事件发射器 API,请查看 ws-wrapper
    【解决方案4】:

    对于 Node.js,你可以试试ws + ws-wrapper + ws-server-wrapper。 ws-wrapper 是一个轻量级库,它为 WebSockets 添加了一些事件处理程序功能......类似于您在 socket.io 中可能找到的内容。此外,您还可以获得基于 Promise 的请求和命名空间。

    正如其他人所提到的,ws 模块非常快速、轻量级,甚至被 socket.io 在后台使用。原生 WebSockets 现在是 supported by all modern browsers,因此为大多数实时 Web 应用程序支持其他传输似乎很愚蠢。

    ws-wrapper 甚至没有实现自动重新连接,所以如果你想这样做,请查看this wiki page describing an exponential back-off approach

    最后,ws-server-wrapper 是服务器端的库,允许您执行以下操作:向所有连接的 WebSocket 发送消息,侦听来自所有 WebSocket 的事件等。

    免责声明:我是 ws-wrapper 的作者。 :)

    【讨论】:

      猜你喜欢
      • 2010-09-10
      • 2014-04-23
      • 1970-01-01
      • 2011-07-18
      • 2013-08-01
      • 1970-01-01
      • 2011-12-06
      • 2010-09-22
      相关资源
      最近更新 更多