Que Biblioteca websocket usar com o nó.js? [fechado]

actualmente existe uma pletora de bibliotecas websocket para o nó.js, o mais popular parece ser:

No entanto, não consigo encontrar comparações concretas sólidas entre nenhuma delas... Aparentemente Socket.io foi impressionante, mas tornou-se bastante antiquado e tem falhas de construção. Ambos WS e websocket-node afirmam que eles são os mais rápidos. E engine.io parece novo, mas muito mais pesado do que os aletarntivos mais leves.

Seria incrível se nós ou alguém pudéssemos reunir uma resposta que servisse de guia sobre qual biblioteca de socket usar e quando, bem como uma comparação entre eles.

Author: Igor Antun, 2013-05-06

3 answers

Estou a começar com esta resposta comunitária. Sinta-se à vontade para editar-me com as suas melhorias.
  • Ws Servidor webocket e cliente para o nó.js. Uma das bibliotecas mais rápidas, se não a mais rápida.

  • Websocket-node Servidor webocket e cliente para o nó.js

  • Websocket-driver-node WebSocket server and client protocol parser node.js-utilizado em Faye-websocket-nó

  • Faye-websocket-node WebSocket server e client for node.js-utilizado em faye e sockjs

  • Socket.io Servidor webocket e cliente para o nó.cliente JS + para Navegadores + (o v0 tem os mais recentes recuos mais antigos, v1 de Socket.io utilizações engine.io) + canais-utilizados em stack.io. Client library tenta se reconectar após a desconexão.

  • Sockjs Servidor webocket e cliente para o nó.JS e outros + cliente para navegadores + mais recentes para os mais antigos fallbacks

  • Faye servidor WebSocket e cliente para o nó.JS and others + client for browsers + fallbacks + support for other server-side languages

  • Deepstream.io servidor em tempo real que lida com WebSockets e ligações TCP e fornece sincronização de dados, pub / sub e requisição / resposta

  • Socket Cluster servidor WebSocket que faz uso de todos os núcleos de CPU na sua máquina. Por exemplo, se você usasse uma instância Xlarge Amazon EC2 com 32 núcleos, você seria capaz de lidar com quase 32 vezes o tráfego em uma única instância.

  • Primus fornece uma API comum para a maioria das bibliotecas acima para melhorias fáceis de switching + estabilidade para todos eles.

Quando utilizar:

  • Use os servidores WebSocket básicos quando quiser usar as implementações WebSocket nativas no lado do cliente, tenha cuidado com a incapacidade do navegador

  • Use as bibliotecas de fallback quando se preocupa com os fallbacks do navegador

  • Use as bibliotecas completas quando se preocupa com os canais

  • Use o primus quando você não tem idéia sobre o que usar, não estão com disposição para reescrever sua aplicação quando você precisa mudar de frameworks por causa de mudar os requisitos do projeto ou precisa de estabilidade de conexão adicional.

[1] teste:

O Firecamp é um ambiente de testes GUI para o SocketIO, WS e toda a maior tecnologia em tempo real. Depurar os eventos em tempo real enquanto o está a desenvolver.

 396
Author: balupton, 2019-01-03 17:06:16

Actualização: esta resposta está desactualizada à medida que as versões mais recentes das bibliotecas mencionadas são lançadas desde então.

Socket.IO v0. 9 está desatualizado e um pouco buggy, e Engine.IO é a sucessor interino. Socket.IO v1. 0 (que será lançado em breve) irá utilização Engine.IO e ser muito melhor que v0.9. Eu recomendaria que usasses Engine.IO até Socket.IO v1. 0 é lançado.

O " ws " não suporta o recurso, por isso se o navegador do cliente não suporte websockets, não irá trabalho, ao contrário Socket.IO e Engine.IO que utiliza sondagens longas, etc, Se não estiverem disponíveis websockets. Entanto, "ws" parece ser a biblioteca mais rápida do momento.

Veja o meu artigo comparando Socket.IO, Engine.IO e Primus: https://medium.com/p/b63bfca0539

 40
Author: Deniz Ozger, 2015-12-09 10:06:04
Npm W foi a resposta para mim. Achei-o menos intrusivo e mais directo. Com ele também era trivial misturar websockets com serviços de descanso. Compartilhou um código simples neste 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");
 32
Author: MFAL, 2014-10-01 08:10:11