14

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

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

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

4

4 回答 4

15

ws模块速度惊人(查看基准测试),经过良好测试,非常非常轻量级,但是没有你必须自己做后备,另外,它上面没有事件发射器。但是,如果这是您想要的,那么仅在运输方面就很棒。如果你想要一个穷人的“会话”,只需在 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;
        }
    });
});

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

于 2012-08-19T10:51:31.913 回答
8

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

于 2012-08-19T06:07:13.040 回答
6

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

于 2012-08-19T10:38:02.373 回答
4

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

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

ws-wrapper甚至没有实现自动重新连接,所以如果你想要,请查看描述指数回退方法的 wiki 页面

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

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

于 2017-08-28T16:38:27.373 回答