socket.io的轻量级替代品,仅用于传输

时间:2012-08-19 02:17:41

标签: node.js websocket socket.io

是否只有socket.io的轻量级替代品才能进行传输?

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

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

4 个答案:

答案 0 :(得分:11)

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;
        }
    });
});

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

对于Node.js,您可以尝试ws + ws-wrapper + ws-server-wrapper。 ws-wrapper是一个轻量级的lib,它为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是服务器端的库,允许您执行以下操作:向所有连接的WebSockets发送消息,侦听来自所有WebSockets的事件等。

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