其中的WebSocket库Node.js的使用? [关闭](Which websocket li

2019-09-02 00:58发布

目前有一种WebSocket的库多如牛毛的node.js的,最流行的似乎是:

  • https://github.com/Worlize/WebSocket-Node
  • https://github.com/einaros/ws
  • https://github.com/LearnBoost/engine.io
  • https://github.com/learnboost/socket.io
  • https://github.com/sockjs

但是我无法找到任何他们之间的任何坚实的混凝土比较......显然Socket.io是真棒,但已相当陈旧,很多失败的基础之上。 Ws和WebSocket的节点要求他们是最快的。 而engine.io似乎新的,但比轻aletarntives更重了很多。

这将是惊人的,如果我们还是有人可以放在一起,是作为其socket库的指导使用和时,以及它们之间的比较的答案。

Answer 1:

让球与此滚动社区维基答案。 随意编辑我用你的改进。

  • WS的WebSocket服务器和客户端的node.js中 其中最快库如果不是最快的国家之一。

  • WebSocket的节点的WebSocket服务器和客户端的node.js

  • WebSocket的驱动器节点的WebSocket服务器和客户端协议解析器的node.js -在菲-WebSocket的节点使用

  • 费伊-WebSocket的节点的WebSocket服务器和客户机为的node.js -在菲和sockjs使用

  • socket.io的WebSocket服务器和客户机为的node.js +客户端-浏览器+(V0已经最新到最旧回退,Socket.io的V1使用engine.io)+通道-在stack.io使用。 客户端库尝试断开时重新连接。

  • sockjs的WebSocket服务器和客户端的node.js和其他+客户端浏览器+最新到最旧回退

  • 王菲的WebSocket服务器和客户端的node.js和其他+客户端浏览器+后备+其他服务器端语言支持

  • deepstream.io一个处理的WebSockets&TCP连接,并提供数据同步,发布/订阅和请求/响应可群集实时服务器

  • socketcluster的WebSocket服务器集群,这使得利用所有的CPU内核的机器上。 例如,如果你使用的XLARGE Amazon EC2实例具有32个内核,你将能够处理在单个实例上近32倍的流量。

  • PRIMUS提供用于最上面的库的,便于开关+稳定性改进为所有这些的共同API。

何时使用:

  • 使用基本的WebSocket服务器时要使用本机的WebSocket实现对客户方,提防的浏览器incompatabilities

  • 使用后备库,当你关心浏览器的回退

  • 使用功能齐全的图书馆时,你所关心的通道

  • 使用PRIMUS当你不知道用什么想法,都没有心情,因为当你需要切换的,因为不断变化的项目需求的框架或需要额外的连接稳定性重写你的应用程序。

当测试:

Firecamp是SocketIO,WS和所有主要的实时技术的GUI测试环境。 调试实时事件当你正在开发它。



Answer 2:

更新:这个答案是过时所提到的库的更新版本,此后推出的。

Socket.IO V0.9已经过时,而且有点马车,而Engine.IO是临时继任者。 Socket.IO V1.0(这将很快被释放)将使用Engine.IO和比V0.9要好得多。 我建议你使用Engine.IO直到Socket.IO V1.0被释放。

“WS”不回退支持,因此,如果客户端浏览器不支持WebSockets的,它不会工作,不像Socket.IO和Engine.IO它采用长轮询等,如果WebSockets的不可用。 然而,“WS”似乎是目前最快的库。

请参阅我的文章比较Socket.IO,Engine.IO和博智: https://medium.com/p/b63bfca0539



Answer 3:

NPM WS是我的答案。 我发现它较少干扰,更直接。 有了它也是微不足道的休息服务混合的WebSockets。 分享这篇文章上的简单的代码。

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


文章来源: Which websocket library to use with Node.js? [closed]