node.js websocket socket.io sockjs engine.io

¿Qué biblioteca websocket usar con Node.js?



socket.io sockjs (3)

Actualmente hay una gran cantidad de bibliotecas websocket para node.js, las más populares parecen ser:

Sin embargo, no puedo encontrar comparaciones concretas sólidas entre ninguno de ellos ... Al parecer, Socket.io fue increíble, pero se ha vuelto bastante anticuado y tiene versiones fallidas. Tanto ws como websocket-node dicen que son los más rápidos. Y engine.io parece nuevo, pero mucho más pesado que los aletarntives más ligeros.

Sería sorprendente si nosotros o alguien pudiéramos armar una respuesta que sirva de guía sobre qué biblioteca de sockets usar y cuándo, así como una comparación entre ellos.


Actualización: esta respuesta está desactualizada ya que las versiones más nuevas de las bibliotecas mencionadas se publican desde entonces.

Socket.IO v0.9 está desactualizado y tiene un poco de buggy, y Engine.IO es el sucesor interino. Socket.IO v1.0 (que se lanzará pronto) usará Engine.IO y será mucho mejor que v0.9. Te recomendaría que uses Engine.IO hasta que se lance Socket.IO v1.0.

"ws" no admite el respaldo, por lo que si el navegador del cliente no es compatible con websockets, no funcionará, a diferencia de Socket.IO y Engine.IO, que usa un sondeo largo, etc. si los websockets no están disponibles. Sin embargo, "ws" parece ser la biblioteca más rápida en este momento.

Vea mi artículo comparando Socket.IO, Engine.IO y Primus: https://medium.com/p/b63bfca0539


npm ws fue la respuesta para mí. Lo encontré menos intrusivo y más directo. Con ello también fue trivial mezclar websockets con servicios de descanso. Código simple compartido en esta publicación.

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


Haciendo rodar la pelota con esta comunidad wiki responde. Siéntete libre de editarme con tus mejoras.

  • https://github.com/einaros/ws servidor y cliente WebSocket para node.js. Una de las bibliotecas más rápidas, si no la más rápida.

  • https://github.com/Worlize/WebSocket-Node Servidor y cliente WebSocket para node.js

  • websocket-driver-node Servidor WebSocket y analizador de protocolo de cliente node.js: se utiliza en faye-websocket-node

  • faye-websocket-node Servidor y cliente de WebSocket para node.js: se utiliza en faye y sockjs

  • https://github.com/learnboost/socket.io WebSocket servidor y cliente para node.js + cliente para navegadores + (v0 tiene fallbacks más antiguos a más antiguos, v1 de Socket.io usa engine.io) + canales: se usa en stack.io La biblioteca del cliente intenta reconectarse al desconectarse.

  • sockjs WebSocket servidor y cliente para node.js y otros + cliente para navegadores + más reciente a más antiguos fallbacks

  • faye WebSocket Server and Client para node.js y otros + client para navegadores + fallbacks + soporte para otros lenguajes del lado del servidor

  • deepstream.io servidor deepstream.io tiempo real que maneja conexiones WebSockets y TCP y proporciona sincronización de datos, pub / sub y solicitud / respuesta

  • socketcluster WebSocket server cluster que utiliza todos los núcleos de CPU de su máquina. Por ejemplo, si utilizara una instancia de Amazon EC2 xlarge con 32 núcleos, podría manejar casi 32 veces el tráfico en una sola instancia.

  • primus Proporciona una API común para la mayoría de las bibliotecas anteriores para un cambio sencillo + mejoras de estabilidad para todas ellas.

Cuándo usar:

  • use los servidores básicos de WebSocket cuando desee usar las implementaciones nativas de WebSocket en el lado del cliente, tenga cuidado con las incompatibilidades del navegador

  • Utilice las bibliotecas de respaldo cuando le interesan los fallbacks del navegador.

  • Usa las bibliotecas completas cuando te interesan los canales.

  • use primus cuando no tenga idea de qué usar, no está de humor para reescribir su aplicación cuando necesita cambiar los marcos debido a los cambios en los requisitos del proyecto o necesita una estabilidad de conexión adicional.