問題タブ [engine.io]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - Node.js で使用する websocket ライブラリはどれですか?
現在、node.js 用の websocket ライブラリは多数ありますが、最も人気があるのは次のようです。
- https://github.com/Wollize/WebSocket-Node
- https://github.com/einaros/ws
- https://github.com/LearnBoost/engine.io
- https://github.com/learnboost/socket.io
- https://github.com/sockjs
しかし、私はそれらのいずれかの間にしっかりした具体的な比較を見つけることができません...明らかにSocket.ioは素晴らしかったですが、かなり時代遅れになり、ビルドに失敗しています。ws と websocket-node の両方が最速であると主張しています。そして、engine.io は新しいように見えますが、軽量の aletarntives よりもかなり重いです。
私たちまたは誰かが、どのソケット ライブラリをいつ、どのソケット ライブラリを使用するか、およびそれらを比較するためのガイドとして機能する回答をまとめることができれば、すばらしいことです。
sockjs - Engine.IO と SockJS の選択
Engine.IO と SockJS のどちらを選択するか? 彼らは競争しており、これは単なる好みと意見の問題ですか、それともどちらかを選択する際にいくつかの論理がありますか?
node.js - Node.js - サーバーでデータを圧縮し、Engine.IO Web ソケット経由で送信し、クライアントで解凍する
サーバー上の JSON データを GZip し、Web ソケットの Engine.IO 実装を介して送信します。
Browserify(http://browserify.org/)でインポートしたZLIBモジュールで解凍します
ただし、このエラーが発生します(「デコードされた」は明らかに未定義です):
何か案は?
websocket - Engine.io または SockJS、どちらを選択しますか?
最近、メモリ リークとスケーリングの問題に関して、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 つのライブラリのどちらを好みますか?また、その理由は何ですか? それらを本番環境で使用していますか?
どちらがより積極的に維持される可能性が高く、将来的に他のものよりも大きな利点を持つ可能性がありますか?
javascript - engine.io を使用した Nodejs サーバー/クライアント ソケット接続
ポート 8888 でリッスンしている engine.io ソケット リスナーとプレーンな index.html で実行されている JavaScript クライアントとの間で確立された単純なソケット接続を取得しようとしています。
このタスクを達成するのはかなり簡単に見えましたが、どういうわけか、xhr ポーリング クライアントを適切に接続できません。クライアント番号が増加するため、接続しますが、onopen イベントはクライアント側でトリガーされません。代わりに、サーバー側のクライアント数は無限に増加し続け、クライアントはサーバーからメッセージを受信することはなく、サーバーもクライアントからメッセージを受信しません。
それはすべて websocket トランスポートで完全に機能しますが、機能するには xhr-polling も必要です。
app.js
index.html
クライアント コンソール