最近、メモリ リークとスケーリングの問題に関して、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 つのライブラリのどちらを好みますか?また、その理由は何ですか? それらを本番環境で使用していますか?
どちらがより積極的に維持される可能性が高く、将来的に他のものよりも大きな利点を持つ可能性がありますか?