哪个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是真棒,但已经变得相当过时,并有失败的构build。 ws和websocket-node声称他们是最快的。 而engine.io似乎是新的,但比轻量级的重量级要重得多。
如果我们或者某个人能够把一个答案作为一个指导哪个套接字库使用以及什么时候使用,以及它们之间的比较,那将是了不起的。
与这个社区维基答案获取球滚动。 随意编辑我的改进。
-
ws WebSocket服务器和客户端的node.js。 如果不是最快的一个,它是最快的一个库。
-
WebSocket 节点 WebSocket服务器和客户端node.js
-
websocket-driver-node WebSocket服务器和客户端协议parsing器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和其他+客户端的浏览器+ fallback +支持其他服务器端语言
-
deepstream.io群集实时服务器,处理WebSocket和TCP连接,并提供数据同步,发布/ 订阅和请求/响应
-
socketcluster WebSocket服务器群集,利用您的机器上的所有CPU核心。 例如,如果您要使用32核心的xlarge Amazon EC2实例,那么您将能够处理单个实例上几乎32倍的stream量。
-
primus为大多数上述库提供了一个通用的API,以便为所有这些库提供简单的切换+稳定性改进。
何时使用:
-
当你想在客户端使用本地的WebSocket实现时,使用基本的WebSocket服务器,注意浏览器的不兼容性
-
当您关心浏览器回退时使用回退库
-
当您关心频道时,请使用全function库
-
当你不知道应该使用什么时,可以使用primus,当你需要改变框架,因为改变项目需求或者需要额外的连接稳定性时,没有心情重写你的应用程序。
更新:从那时起,这个答案已经过时,因为提到的更新版本的库被释放。
Socket.IO v0.9已经过时了,有点bug,Engine.IO是临时的inheritance者。 Socket.IO v1.0(即将发布)将使用Engine.IO,比v0.9好很多。 我build议你使用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是我的答案。 我发现它更less侵入,更直接。 将websocket和其他服务混合起来也是微不足道的。 在这个post上分享简单的代码。
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");