35

最近、メモリ リークとスケーリングの問題に関して、Socket.io で問題が発生しました。私が Socket.io を使用することを決定したのは、1 年以上前に、それが間違いなく使用するのに最適なライブラリであったときです。

Socket.io が多くの問題を引き起こしているため、その間に利用可能になった代替手段を探すのに時間を費やし、Engine.io と SockJS の両方が一般的に私に適していると考えています。しかし、私の意見では、どちらにもいくつかの欠点があり、どちらを選択すればよいかわかりません。

Engine.io は基本的に Socket.io の完全な軽量バージョンであり、私が必要としないすべての機能が含まれているわけではありません。デフォルトのロジックに満足できず、Socket.io が提供するルームやその他の機能を使用するつもりがなかったので、Socket.io 用に独自の再接続およびハートビート ロジックを既に作成しました。

しかし、私の意見では、Engine.io の主な欠点は接続の確立方法です。クライアントは低速の jsonp-polling から開始し、より優れたトランスポートをサポートする場合はアップグレードされます。Websocket をネイティブにサポートするクライアント (数は着実に増加) が、古いブラウザーを使用するクライアントよりも接続手順が長く不安定であるという形で不利であるという事実は、それをどのように処理すべきかについての私の感覚と矛盾します。

一方、SockJS は、私が望むとおりに接続を処理します。私が読んだところによると、Engine.io には現時点でいくつかの問題がありますが、かなり安定しているようです。

私のアプリは単一ドメインの Nginx ルーターの背後で実行されているため、SockJS が提供するクロスドメイン機能は必要ありません。ただし、この機能を提供するため、SockJS はクライアントの Cookie データをまったく公開しません。これまでのところ、Cookie とクエリ文字列トークンを介して Socket.io で 2 要素認証を行っていましたが、これは SockJS では不可能です (Engine.io では可能です)。

私は利用可能なものと両方の長所と短所をほとんどすべて読みましたが、これまでのところ、特に Engine.io についてはあまり議論または公開されていないようです (ここでは engine.io でタグ付けされた質問は 8 つしかありません)。

  • 2 つのライブラリのどちらを好みますか?また、その理由は何ですか? それらを本番環境で使用していますか?

  • どちらがより積極的に維持される可能性が高く、将来的に他のものよりも大きな利点を持つ可能性がありますか?

4

3 に答える 3

5

プリムスを見たことがありますか?あなたが言及したCookie要件を提供し、利用可能な主要な「リアルタイム」/ websocketライブラリをすべてサポートし、かなり活発なプロジェクトです. 私には、ベンダーロックインがあなたにとって懸念事項のように思えます.Primusはそれに対処します.

プラグイン システムを使用しているという事実は、a) 必要に応じて拡張することを容易にし、b) 必要なことを既に実行しているコミュニティ プラグインを実際に持っている可能性もあります。

2 つのライブラリのどちらを好みますか?また、その理由は何ですか? それらを本番環境で使用していますか?

私は Vert.x API を介してのみ SockJS を使用しました。これは、「本番」と見なす内部プロジェクト用でしたが、本番向けのコンシューマー アプリではありませんでした。とは言え、なかなかの出来でした。

どちらがより積極的に維持される可能性が高く、将来的に他のものよりも大きな利点を持つ可能性がありますか?

Engine.ioSockJSのコミット履歴と、Automatic が Engine.io をサポートしているという事実を見るだけで、より長期間、より安定していると思いがちですが、もちろんそれには議論の余地があります。Engine.ioSockJSの問題を検討することも評価に適した場所ですが、どちらも複数のリポジトリに分割されているため、慎重に検討する必要があります。Automattic が Engine/Socket.io をどこでどのように使用しているかはわかりませんが、WordPress.com またはそのプラグインの 1 つにある場合は、大規模な本番環境での十分なテストが行​​われています。

編集: 以下のコメントで Primus の作成者によって確認された Cookie のサポートを反映するように回答を変更します

于 2014-08-31T14:23:30.563 に答える
1

SockJS と Engine.io に関するこの (非常に詳細な) ディスカッション スレッドにリダイレクトしたいと思います。

https://groups.google.com/forum/#!topic/sockjs/WSIdcY14ciI

基本的、

SockJS は、接続をオープンとしてマークする前に、動作中のトランスポートを検出します。Engine.io はすぐに接続を開き、後でアップグレードします。

flash、Engine.io フォールバックの 1 つ (SockJS には存在しない) の読み込みは遅く、プロキシの背後にある環境ではタイムアウトに 3 秒かかります。

SockJS はフラッシュを使用しないため、この問題を回避する必要はありません。

SockJS は起動時にアップグレードを行います。その後、一貫した経験があります。送信したものを送信し、受信したものを受信します。

また、私が知る限り、engine.io の engine.io-client (クライアント側) ライブラリは、requirejs ビルドをサポートしていないため、それがもう 1 つのマイナス点です。(SockJS は完全にビルドされます)。

于 2014-07-19T10:52:55.673 に答える