WebSocketsとServer-Sent Eventsはどちらもデータをブラウザーにプッシュできます。私には彼らは競合するテクノロジーのようです。それらの違いは何ですか?いつどちらを選ぶか?
curl
です。HTTPを介した単なるテキスト形式であるため、何が起こっているのかを簡単に確認できます。
WebSocketsとServer-Sent Eventsはどちらもデータをブラウザーにプッシュできます。私には彼らは競合するテクノロジーのようです。それらの違いは何ですか?いつどちらを選ぶか?
curl
です。HTTPを介した単なるテキスト形式であるため、何が起こっているのかを簡単に確認できます。
回答:
WebsocketとSSE(Server Sent Events)はどちらもデータをブラウザーにプッシュできますが、競合するテクノロジーではありません。
WebSocket接続は、データをブラウザーに送信したり、ブラウザーからデータを受信したりできます。WebSocketを使用できるアプリケーションの良い例は、チャットアプリケーションです。
SSE接続はデータをブラウザーにプッシュすることのみが可能です。オンラインの株価情報、またはタイムラインやフィードを更新するTwitterは、SSEの恩恵を受けることができるアプリケーションの良い例です。
実際には、SSEで実行できることはすべてWebsocketでも実行できるため、Websocketは多くの注目と愛情を得ており、SSEよりも多くのブラウザーがWebsocketをサポートしています。
ただし、一部のタイプのアプリケーションではやり過ぎになる可能性があり、SSEなどのプロトコルを使用してバックエンドを実装する方が簡単な場合があります。
さらに、SSEは、JavaScriptだけを使用してネイティブでサポートしていない古いブラウザーにポリフィルすることができます。SSEポリフィルのいくつかの実装は、Modernizr githubページにあります。
落とし穴:
www.example1.com
、さらに6つのSSE接続を開くことができますwww.example2.com
(Phateに感謝)。HTML5Rocksには、SSEに関する優れた情報があります。そのページから:
サーバー送信イベントとWebSocket
なぜWebSocket経由でサーバー送信イベントを選択するのですか?良い質問。
SSEが影に隠されている理由の1つは、WebSocketのような後のAPIが双方向の全二重通信を実行するためのより豊富なプロトコルを提供するためです。双方向チャネルを持つことは、ゲーム、メッセージングアプリなどの場合や、双方向でほぼリアルタイムの更新が必要な場合に、より魅力的です。ただし、一部のシナリオでは、データをクライアントから送信する必要はありません。サーバーアクションからの更新が必要なだけです。いくつかの例は、友達のステータス更新、株価表示、ニュースフィード、またはその他の自動データプッシュメカニズム(クライアント側のWeb SQLデータベースまたはIndexedDBオブジェクトストアの更新など)です。サーバーにデータを送信する必要がある場合、XMLHttpRequestは常に友だちです。
SSEは従来のHTTP経由で送信されます。つまり、機能するために特別なプロトコルやサーバーの実装は必要ありません。一方、WebSocketは、プロトコルを処理するために、全二重接続と新しいWeb Socketサーバーを必要とします。さらに、サーバー送信イベントには、自動再接続、イベントID、任意のイベントを送信する機能など、WebSocketには設計上欠けているさまざまな機能があります。
Webソケットに対するSSEの利点:
SSEに対するWebsocketの利点:
SSEの理想的な使用例:
SSEの落とし穴:
caniuse.comによると:
クライアントのみのポリフィルを使用して、SSEのサポートを他の多くのブラウザーに拡張できます。これはWebSocketの場合はあまり起こりません。一部のEventSourceポリフィル:
すべてのブラウザをサポートする必要がある場合は、WebSockets、js、SignalR、またはsocket.ioなどのライブラリを使用して、WebSocket、SSE、Forever Frame、AJAXロングポーリングなどの複数のトランスポートをサポートすることを検討してください。多くの場合、サーバー側にも変更が必要です。
SSEの詳細については、以下をご覧ください。
WebSocketの詳細については、以下をご覧ください。
その他の違い:
Webソケット-単一のTCP接続で全二重通信チャネルを提供するプロトコルです。たとえば、サーバーとブラウザ間の双方向通信プロトコルはより複雑であるため、サーバーとブラウザは、WebSocketのライブラリに依存する必要があります。socket.io
Example - Online chat application.
SSE(サーバー送信イベント)-
サーバー送信イベントの場合、通信はサーバーからブラウザーにのみ行われ、ブラウザーはサーバーにデータを送信できません。この種の通信は主に、更新されたデータを表示する必要がある場合に使用され、データが更新されるたびにサーバーがメッセージを送信します。たとえば、サーバーからブラウザへの一方向の通信です。このプロトコルはそれほど複雑ではないため、外部ライブラリJAVASCRIPT自体に依存する必要はなくEventSource
、サーバーから送信されたメッセージを受信するためのインターフェースを提供します。
Example - Online stock quotes or cricket score website.
注意すべき点の1つ:
Webソケットと企業ファイアウォールに問題がありました。(HTTPSの使用は役立ちますが、常にではありません。)
https://github.com/LearnBoost/socket.io/wiki/Socket.IO-and-firewall-software https://github.com/sockjs/sockjs-client/issues/94を参照してください
サーバー送信イベントにはそれほど問題はないと思います。しかし、私にはわかりません。
とはいえ、WebSocketは非常に楽しいものです。(Socket.IO経由で)WebSocketを使用する小さなWebゲームを持っています(http://minibman.com)
最大接続制限は、http2 + sseの問題ではありません。
http 1の問題でした