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

目前,node.js有过多的websocket库,最流行的似乎是:

  • https://github.com/Worlize/WebSocket-Node < a href = " https://github.com/Worlize/WebSocket-Node " > < / >
  • https://github.com/einaros/ws < a href = " https://github.com/einaros/ws " > < / >
  • https://github.com/LearnBoost/engine.io < a href = " https://github.com/LearnBoost/engine.io " > < / >
  • https://github.com/learnboost/socket.io < a href = " https://github.com/learnboost/socket.io " > < / >
  • https://github.com/sockjs < a href = " https://github.com/sockjs " > < / >
然而,我找不到任何可靠的具体比较… 显然插座。IO是很棒的,但已经变得相当过时,并有失败的构建。ws和websocket-node都声称它们是最快的。和引擎。IO看起来很新,但比较轻的etarntives重得多

如果我们或者其他人能够给出一个答案,作为使用哪个套接字库以及何时使用的指南,以及它们之间的比较,那将是令人惊讶的。

243698 次浏览

用这个社区维基的答案让球滚动起来。请随意编辑我与您的改进。

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

  • websocket-node 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有最新到最老的回退,v1的Socket。IO使用engine.io) +通道-用于stack.io。客户端库试图在断开连接时重新连接

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

  • 法耶 WebSocket服务器和客户端node.js和其他+客户端浏览器+回退+支持其他服务器端语言

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

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

  • 博智金融为上述大多数库提供了一个通用API,以方便切换+提高所有库的稳定性。

使用时间:

  • 当你想在客户端使用本地WebSocket实现时,

    使用基本的WebSocket服务器,当心浏览器不兼容

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

  • 当你关心通道时使用全功能库

  • 当你不知道该使用什么,当你因为改变项目需求或需要额外的连接稳定性而需要切换框架时,没有心情重写应用程序时,请使用primus。

测试地点:

Firecamp是一个用于SocketIO, WS和所有主要实时技术的GUI测试环境。在开发时调试实时事件。

更新:这个答案已经过时了,因为之前提到的库的更新版本已经发布了。

< p >插座。IO v0.9已经过时了,而且有点bug。IO是 临时继任者。套接字。IO v1.0(即将发布)将会实现 使用引擎。IO和比v0.9更好。我推荐你使用 引擎。IO直到Socket。IO v1.0发布

"ws"不支持回退,所以如果客户端浏览器不支持 支持websockets,它不会工作,不像Socket。IO和引擎。IO 如果websockets不可用,则使用长轮询等。然而, "ws"似乎是目前最快的库

参见我的文章比较Socket。IO,引擎。IO和Primus: https://medium.com/p/b63bfca0539 < / p >

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