使用Node.js时应该使用哪个websocket库?[关闭]

9 浏览
0 Comments

使用Node.js时应该使用哪个websocket库?[关闭]

目前,对于node.js来说,有大量的websocket库可供选择,其中最受欢迎的似乎有:\n

\n然而,我找不到它们之间任何具体的对比信息...\n显然,Socket.io曾经很棒,但现在已经过时,并且编译失败。ws和websocket-node都声称自己是最快的。而engine.io似乎是新的,但比其他轻量级的替代方案要重得多。\n如果我们或其他人能够提供一个指南来解决何时使用哪个socket库以及它们之间的比较,那将是非常棒的。

0
0 Comments

这篇文章将展示一个关于如何选择在Node.js中使用的websocket库的问题的原因和解决方法。原问题是关于如何在Node.js中选择websocket库的,而解决方法是使用npm ws库。

npm ws对我来说是一个很好的选择。我发现它更简单直接,对于将websocket与rest服务混合使用也很简单。我在这篇文章中分享了一些简单的代码。

在解决方法中,我们使用了以下代码:

var WebSocketServer = require("ws").Server;
var http = require("http");
var express = require("express");
var port = process.env.PORT || 5000;
var app = express();
    app.use(express.static(__dirname+ "/../"));
    app.get('/someGetRequest', function(req, res, next) {
       console.log('receiving get request');
    });
    app.post('/somePostRequest', function(req, res, next) {
       console.log('receiving post request');
    });
    app.listen(80); //port 80 need to run as root
    console.log("app listening on %d ", 80);
var server = http.createServer(app);
    server.listen(port);
console.log("http server listening on %d", port);
var userId;
var wss = new WebSocketServer({server: server});
    wss.on("connection", function (ws) {
    console.info("websocket connection open");
    var timestamp = new Date().getTime();
    userId = timestamp;
    ws.send(JSON.stringify({msgType:"onOpenConnection", msg:{connectionId:timestamp}}));
    ws.on("message", function (data, flags) {
        console.log("websocket received a message");
        var clientMsg = data;
        ws.send(JSON.stringify({msg:{connectionId:userId}}));
    });
    ws.on("close", function () {
        console.log("websocket connection close");
    });
});
console.log("websocket server created");

然后,问题是如何在连接方法中获取请求的URL。回答是在websocket请求中没有请求URL,就像ajax请求一样。javascript库通过使用类似127.0.0.1:8080或anything.com:7777这样的地址与你的websocket服务器建立连接。如果你感到困惑,可以尝试通过一些简单的websocket教程来了解更多。

实际上,WebSocket端点也有URL,它们以ws开头,比如ws://myserver.com。是的,它们也可以配置为使用80和443端口。使用类似nginx的反向代理,你可以将WebSocket协议的URL路由到正常的HTTP协议的另一个端口上。

如果你想要模拟路由,可以使用express-ws库来添加ws路由到express应用程序中。

如果你想要测试这段代码是否有效,你可以进行以下操作。

0
0 Comments

问题的出现原因是因为有人询问在使用Node.js时应该使用哪个websocket库。在回答中提到了Socket.IO v0.9已经过时且有些bug,而Engine.IO是其临时继任者。Socket.IO v1.0将使用Engine.IO,并且比v0.9要好得多。作者建议在Socket.IO v1.0发布之前使用Engine.IO。

另外,"ws"不支持回退,所以如果客户端浏览器不支持websocket,它将无法工作,而Socket.IO和Engine.IO在websocket不可用时使用长轮询等技术。然而,"ws"目前似乎是最快的库。

还有一个比较Socket.IO、Engine.IO和Primus的文章链接。

文章最后提到了Socket.IO发布了v1版本,Engine.IO不是其替代品,而是被Socket.IO内部用作传输协议。它抽象了端点之间的实际通信(xhr,ws),并具有简单的数据包格式。Socket.IO提供了一个更丰富的API,感觉上就像是在网络上使用事件触发器。

解决方法是在Socket.IO v1.0发布之前使用Engine.IO,或者根据自己的需求选择合适的库。

下面是整理后的文章:

--------

在使用Node.js时,选择哪个websocket库呢?

问题的出现是因为有人询问在使用Node.js时应该使用哪个websocket库。在回答中提到了Socket.IO v0.9已经过时且有些bug,而Engine.IO是其临时继任者。Socket.IO v1.0将使用Engine.IO,并且比v0.9要好得多。作者建议在Socket.IO v1.0发布之前使用Engine.IO。

另外,"ws"不支持回退,所以如果客户端浏览器不支持websocket,它将无法工作,而Socket.IO和Engine.IO在websocket不可用时使用长轮询等技术。然而,"ws"目前似乎是最快的库。

还有一个比较Socket.IO、Engine.IO和Primus的文章链接。

文章最后提到了Socket.IO发布了v1版本,Engine.IO不是其替代品,而是被Socket.IO内部用作传输协议。它抽象了端点之间的实际通信(xhr,ws),并具有简单的数据包格式。Socket.IO提供了一个更丰富的API,感觉上就像是在网络上使用事件触发器。

解决方法是在Socket.IO v1.0发布之前使用Engine.IO,或者根据自己的需求选择合适的库。

--------

0
0 Comments

在这个问题中,提问者想要了解在Node.js中应该使用哪个WebSocket库,以及这个问题的出现原因和解决方法。

问题的出现原因是提问者可能在开发过程中遇到了使用WebSocket的需求,但他对可用的库不太了解,希望得到一些建议。

解决方法是通过列举可用的WebSocket库,并提供了每个库的简要描述和使用场景建议。提问者可以根据自己的需求和偏好选择适合的库。

下面是整理后的文章:

在Node.js中应该使用哪个WebSocket库?

当提到在Node.js中使用WebSocket时,有许多可用的库供选择。下面是一些常用的WebSocket库及其简要描述:

1. ws:WebSocket服务器和客户端,可能是最快的库之一。

2. websocket-node:WebSocket服务器和客户端。

3. websocket-driver-node:用于faye-websocket-node的WebSocket服务器和客户端协议解析器。

4. faye-websocket-node:用于faye和sockjs的WebSocket服务器和客户端。

5. socket.io:WebSocket服务器和客户端,同时支持浏览器客户端,并提供最新到最旧的回退功能。

6. sockjs:WebSocket服务器和客户端,同时支持浏览器客户端,并提供最新到最旧的回退功能。

7. faye:WebSocket服务器和客户端,同时支持浏览器客户端,并提供回退功能,并支持其他服务器端语言。

8. deepstream.io:可集群的实时服务器,处理WebSocket和TCP连接,并提供数据同步、发布/订阅和请求/响应功能。

9. socketcluster:WebSocket服务器集群,利用机器上的所有CPU核心,可在单个实例上处理多达32倍的流量。

10. primus:为大多数库提供了一个通用API,方便切换库,并提供稳定性改进。

使用哪个库取决于你的需求和偏好。以下是一些建议:

- 当你想使用客户端的原生WebSocket实现时,可以使用基本的WebSocket服务器。但要注意浏览器的兼容性问题。

- 当你关心浏览器回退功能时,可以使用回退库。

- 当你关心通道功能时,可以使用功能齐全的库。

- 当你对选择使用哪个库感到困惑,或者由于项目需求的变化需要切换框架时,可以使用primus库,它提供了一个通用的API,并提供连接稳定性改进。

如果你想测试WebSocket,可以使用Firecamp,它是一个用于SocketIO、WS和所有主要实时技术的GUI测试环境,可以在开发过程中调试实时事件。

对于提问者对于“channels”的疑问,其中的“channels”指的是所谓的“房间”,每个房间中的参与者可以交换消息。

至于Autobahn/WAMP,它是WebSocket的子协议,而不是一个WebSocket库。提问者明确询问了后者。

选择适合自己需求的WebSocket库是很重要的。在Node.js中有许多可用的库供选择,你可以根据自己的需求和偏好来选择合适的库。通过测试环境来测试WebSocket的功能也是一个不错的选择。

0