轻量级的socket.io替代方案,仅用于传输。

14

有没有轻量级的替代品可以用于仅传输?

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

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


1
+1,但如果你想要一个除了WebSockets之外的备选传输方式,那么你使用的大部分是Socket.IO,我认为你不会找到更轻量级的东西来满足这个需求。 - Brad
想一想,我的应用程序是针对客户端的移动设备,所以我不需要回退。如果将来需要,我可以自己实现回退。 - voidvector
我使用PieSocket Channels - Anand Singh
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;
        }
    });
});

现在唯一缺少的就是在其上加入事件发射器...


我现在正在尝试使用“ws”。“ws”实际上是socket.io在内部使用的东西。缺点是我需要自己实现回退机制。然而,考虑到我的应用程序设计围绕类似WebSocket的通信,我宁愿获得精细的控制权。 - voidvector
和我一样。而且在一两年内,将有超过95%的Web浏览器支持Web套接字。 - João Pinto Jerónimo
目前,似乎Websockets面临的最大问题是企业防火墙(端口80/443上的透明反向代理)。 :-/ - Tracker1
我发现,即使不使用 SSL,如果您使用端口 443,防火墙也不会干扰。 - João Pinto Jerónimo
如果您需要一个库来包装本地WebSocket并为您提供事件发射器API,请查看ws-wrapper - BMiner
缺失的东西是“wse”包:3 - vovchisko

9

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


3
除了Pusher之外,还有Ably (https://www.ably.io),它专注于为开发人员提供具有协议互操作性和数据完整性的强大的发布/订阅流API。需要注意的是,我是Ably的联合创始人,但我相信这仍然是一个有用的评论。 - Matthew O'Riordan
如果Pusher和Ably都对您来说太昂贵了,那么请尝试使用PieSocket。我们已经在所有系统上使用它。 - Divya Singhal

6

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


5
对于Node.js,您可以尝试使用ws + ws-wrapper + ws-server-wrapper。 ws-wrapper是一个轻量级库,为WebSockets添加了一些事件处理程序功能...类似于您可能在socket.io中找到的内容。此外,您还可以获得基于Promise的请求和命名空间。
正如其他人所提到的,ws模块非常快速、轻量级,甚至被socket.io用作底层。现代浏览器现在都支持本地WebSockets,因此对于大多数实时Web应用程序来说,支持其他传输方式似乎有些愚蠢。 ws-wrapper甚至没有实现自动重连,因此如果您需要这个功能,请查看描述指数回退方法的wiki页面
最后,ws-server-wrapper是服务器端的库,允许您执行以下操作:向所有连接的WebSocket发送消息,从所有WebSocket监听事件等。
免责声明:我是ws-wrapper的作者。 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接