哪个websocket库与Node.js一起使用?

目前,有很多用于node.js的websocket库,最受欢迎似乎是:

  • 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-node声称它们是最快的。 而engine.io似乎是新的,但比轻量级的重量级要重得多。

    如果我们或某人可以将一个答案作为指导哪个套接字库使用以及什么时候使用,以及它们之间的比较,那将是了不起的。


    通过这个社区维基答案获得球的滚动。 随意编辑我的改进。

  • 用于node.js的WebSocket服务器和客户端。 如果不是最快的库,它是最快的库之一。

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

  • websocket-driver-node WebSocket服务器和客户端协议解析器node.js - 用于faye-websocket-node

  • faye-websocket-node用于node.js的WebSocket服务器和客户端 - 用于faye和sockjs

  • socket.io WebSocket服务器和客户端,用于node.js +客户端,用于浏览器+(v0具有最新到最旧的回退功能,Socket.io的v1使用engine.io)+通道 - 用于stack.io。 客户端库尝试在断开连接时重新连接。

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

  • faye WebSocket服务器和客户端,用于node.js和其他+客户端,用于浏览器+回退+支持其他服务器端语言

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

  • socketcluster WebSocket服务器集群,它利用您的机器上的所有CPU核心。 例如,如果您要使用32核心的xlarge Amazon EC2实例,那么您将能够处理单个实例上近32倍的流量。

  • primus为大多数上述库提供了一个通用API,以便为所有这些库轻松切换和提高稳定性。

  • 何时使用:

  • 如果要在客户端使用本机WebSocket实现,请使用基本WebSocket服务器,注意浏览器不兼容

  • 当您关心浏览器回退时使用回退库

  • 当您关注频道时,请使用全功能库

  • 当你不知道应该使用什么时使用primus,当你需要切换框架时,由于改变项目需求或需要额外的连接稳定性,无法重写应用程序。


  • 更新:自从那时起,随着新版本库的发布,这个答案已经过时。

    Socket.IO v0.9已经过时并且有点bug,Engine.IO是临时的后继者。 Socket.IO v1.0(即将发布)将使用Engine.IO并远远优于v0.9。 我建议你使用Engine.IO,直到Socket.IO v1.0发布。

    “ws”不支持回退,所以如果客户端浏览器不支持websocket,它将不起作用,不像Socket.IO和Engine.IO那样使用长轮询等,如果websocket不可用的话。 但是,“ws”似乎是目前最快的图书馆。

    查看我的比较Socket.IO,Engine.IO和Primus的文章:https://medium.com/p/b63bfca0539


    npm ws是我的答案。 我发现它更少侵入,更直接。 将websocket与休息服务混合也是微不足道的。 在这篇文章上分享简单的代码。

    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");
    
    链接地址: http://www.djcxy.com/p/31329.html

    上一篇: Which websocket library to use with Node.js?

    下一篇: Differences between socket.io and websockets