Node.jsで使用するWebSocketライブラリはどれですか?[閉まっている]


429

現在、node.js用の多数のWebSocketライブラリがあり、最も人気のあるものは次のようです。

しかし、私はそれらの間の明確な具体的な比較を見つけることができません...どうやらSocket.ioは素晴らしかったですが、かなり時代遅れになり、ビルドに失敗しました。wsとwebsocket-nodeはどちらも最速だと主張しています。そして、engine.ioは新しいように見えますが、軽量の排気口よりもかなり重いです。

私たちまたは誰かが、どのソケットライブラリをいつ使用するかについてのガイドとなる回答、およびそれらの比較をまとめることができればすばらしいと思います。


246
これが閉じた場合、このような質問はどこに行くべきですか?答えは非常に役立つので...そのような目立つ質問はここにあるべきではないのは残念です。
balupton 2013年

14
コミュニティWikiのウットウート、つまり、質問が新しい回答から締め切られているにもかかわらず、以下のコミュニティWikiの回答を改善できることを意味します:)
balupton 2013年

14
私は同意します、私はこの種の質問が許可されるだけでなく励まされるのを見たいと思います。OK、彼らは何年もの間関係がないかもしれませんが、それまでは彼らは世界を救うでしょう。
John Little

1
@baluptonは、コミュニティを選択して更新できますか?それはsocket.ioですか?
Cグラフィックス

3
@Cgraphics私は最近wsでPrimusを使用しています。これはwsで十分なので、もっと極端なものが必要な場合は、基盤となるライブラリを交換して、Primusのおかげで同じAPIを保持します。驚異の作品。
balupton 2013年

回答:


390

このコミュニティwikiの回答でボールを転がしてください。改善を加え自由に編集してください。

  • ws WebSocketサーバーとnode.jsのクライアント。最速ではないにしても、最速のライブラリの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は最新から最も古いフォールバック、Socket.ioのv1はengine.ioを使用)+チャネル-stack.ioで使用。クライアントライブラリは、切断時に再接続を試みます。

  • sockjs WebSocketサーバーとnode.jsなどのクライアント+ブラウザのクライアント+最新から最古のフォールバック

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

  • deepstream.ioクラスタリング可能なリアルタイムサーバー。WebSocketとTCP接続を処理し、データ同期、pub / sub、要求/応答を提供します。

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

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

いつ使用するか:

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

  • ブラウザのフォールバックが気になる場合は、フォールバックライブラリを使用する

  • チャンネルに関心がある場合は、フル機能のライブラリを使用します

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

テストする場所:

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


10
詳細な回答ありがとうございます。いつ使用するかというポイント3を説明してください。ポイントが参照しているチャネルは何ですか?私はWebSocketを初めて使用するので、どの場合に使用するかを理解しようとしています。
Akshat Jiwan Sharma 2013

2
アウトバーン/ WAMPはどうですか?
Emile Cormier 14

1
now.jsの終了後に使用可能なすべてのオプションの一覧
Rahul Prasad

@AkshatJiwanSharma:チャンネルは..部屋に各プレイヤーがメッセージを交換することができ、いわゆる「部屋」です
Marwen Trabelsi

4
wsの小さな詳細は、Pythonが必要なことです。したがって、Dockerコンテナーなどにデプロイする場合は、Pythonを使用できるようにする必要がありますws
AntouanK 2015年

40

更新:記載されているライブラリの新しいバージョンがその後リリースされているため、この回答は古くなっています。

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

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

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


これは、通常のNode.js 0.12がすぐに使用できることを思い出します。だから、おそらく、私たちは待って見なければなりません…
Golo Roden

1
Autobahn / WAMPwamp.ws)に関する洞察/経験はありますか?
Emile Cormier

6
Socket.IOがv1をリリースしました。Engine.ioはこれに代わるものではありませんが、トランスポートプロトコルとしてSocket.IOによって内部的に使用されます。これは、エンドポイント(xhr、ws)間の実際の通信を抽象化し、パケットの単純なフォーマットを持っています。Socket.ioは、ネットワーク上のイベントエミッターのように「感じる」より豊富なAPIを提供します。
hammett 2014年

29

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

接続メソッドでリクエストURLを取得する方法は?wss.on( "connection"、function(ws){//いくつかのコードconsole.log(ws。???)get url ...}
Opalosolo

ajaxリクエストのようなリクエストURLはありません。javascriptライブラリは、127.0.0.1:8080などのアドレスを使用して、Webソケットサーバーへの接続を開きます。わかりにくいようですが、Webソケットに関する簡単なチュートリアルを試してみてください。
MFAL 2015

5
実際、WebSocketエンドポイントにもURLがありws、などで始まりws://myserver.comます。はい、80ポートと443ポートを使用してサービスを提供するように構成することもできます。nginxのようなリバースプロキシを使用すると、WebSocketプロトコルのURLを通常のHTTPプロトコルから別のポートにルーティングできます。
Prahlad Yeri、2015

必要に応じてルートをシミュレートできます。
Lucas Tettamanti 2016

1
を使用express-wsするとws、Expressアプリでルートを追加できます。
Dmitry Masley 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.