web-dev-qa-db-ja.com

Node.jsでどのWebSocketライブラリを使用しますか?

現在、 たくさんのウェブソケットライブラリがあります / node.jsには、最も人気があるようです:

しかし、私はそれらのどれの間のどんな具体的な比較も見つけることができません...どうやらSocket.ioはすごかったです、しかしかなり古くなって、そして失敗している構築をしています。 wsとwebsocket-nodeはどちらも最速だと主張しています。そしてengine.ioは新しいように見えますが、軽量のalenarntiveよりもずっと重いです。

私たちまたは誰かがどのソケットライブラリをいつ使うべきかについてのガイドとして役立つ答え、およびそれらの間の比較をまとめることができればそれは素晴らしいことです。

407
balupton

この コミュニティウィキ answerでボールを転がしてください。 私を編集してください あなたの改善があればお気軽に。

  • ws node.js用のWebSocketサーバーおよびクライアント。最速のライブラリでなければ、最速のライブラリの1つです。

  • websocket-node node.js用のWebSocketサーバーおよびクライアント

  • 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 node.jsなどのWebSocketサーバーとクライアント+ブラウザ用のクライアント+最新から最古のフォールバック

  • faye node.jsなどのWebSocketサーバとクライアント、ブラウザ用のクライアント、フォールバック、その他のサーバサイド言語のサポート

  • deepstream.io WebSocketsおよびTCP接続を処理し、データ同期、pub/sub、およびrequest/responseを提供するクラスタ化可能なリアルタイムサーバー

  • socketcluster マシン上のすべてのCPUコアを利用する/ WebSocketサーバークラスタ。たとえば、32個のコアを持つxlarge Amazon EC2インスタンスを使用する場合、単一インスタンスでほぼ32倍のトラフィックを処理できます。

  • primus 上記のほとんどのライブラリに共通のAPIを提供して、簡単に切り替え+安定性を向上させます。

いつ使用するか

  • クライアントサイドでネイティブのWebSocket実装を使用したい場合は、基本的なWebSocketサーバを使用してください。 ブラウザの非互換性に注意してください

  • ブラウザのフォールバックが気になる場合は、フォールバックライブラリを使用してください。

  • あなたがチャンネルを気にするときフル機能のライブラリを使う

  • 何を使うべきかわからないときは、primusを使用してください。プロジェクト要件の変更や追加の接続安定性が必要なためにフレームワークを切り替える必要があるときに、アプリケーションを書き直す気がしません。

テストする場所

Firecamp は、SocketIO、WS、およびすべての主要なリアルタイムテクノロジ用のGUIテスト環境です。開発中にリアルタイムイベントをデバッグします。

372
balupton

更新:この答えは、それ以降に言及されているライブラリの新しいバージョンがリリースされるにつれて古くなっています。

Socket.IO v0.9は古くて少しバグがあり、Engine.IOは暫定的な後継者です。 Socket.IO v1.0(近日リリース予定)はEngine.IOを使用し、v0.9よりはるかに良いでしょう。 Socket.IO v1.0がリリースされるまでEngine.IOを使用することをお勧めします。

"ws"はフォールバックをサポートしていません。そのため、クライアントブラウザがWebソケットをサポートしていない場合、Webソケットが利用できない場合にロングポーリングなどを使用するSocket.IOおよびEngine.IOとは異なり、動作しません。しかし、 "ws"は現時点で最速のライブラリのようです。

Socket.IO、Engine.IOとPrimusを比較して私の記事を参照してください: https://medium.com/p/b63bfca0539

39
Deniz Ozger

答えはnpm wsでした。私はそれがそれほど邪魔にならず、より直接的であると感じました。 Webソケットと他のサービスを混在させるのも簡単なことでした。この記事で共有されている単純なコード。

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