是否只有socket.io的轻量级替代品才能进行传输?
我有一个node.js应用程序,它只使用socket.io作为消息传输。我的应用程序是自己管理会话和消息路由,我只是使用socket.io进行传输 - websocket +无论旧版浏览器的默认回退。
较新版本的socket.io似乎变得越来越重,现在配备了redis支持,我完全不需要。
答案 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的作者。 :)