WebSocketプロトコルとSTOMPプロトコルの主な違いは何ですか?
WebSocketプロトコルとSTOMPプロトコルの主な違いは何ですか?
回答:
この質問は、TCPとHTTPの違いを尋ねるのと似ています。私はまだあなたの質問に答えようとします、あなたが始めているならばこれらの2つの用語の間で混乱するのは当然です。
簡潔な答え
STOMPはWebSocketの上に派生しています。STOMPは、WebSocketを使用してクライアントとサーバー間でメッセージフレームを交換する方法に関するいくつかの具体的な方法について言及しています。
長い答え
WebSocket
これは、クライアントとサーバー間の同期双方向通信を可能にする仕様です。TCPソケットに似ていますが、これはアップグレードされたHTTP接続として動作するプロトコルであり、ストリームではなく、2者間で可変長フレームを交換します。
STOMP
クライアントとサーバーがメッセージングセマンティクスと通信するためのプロトコルを定義します。実装の詳細は定義されていませんが、メッセージング統合のための実装が容易なワイヤープロトコルに対応しています。WebSocketプロトコルに加えてより高度なセマンティクスを提供し、WebSocketフレームにマップされる少数のフレームタイプを定義します。これらのタイプのいくつかは...
WebSocketはメッセージングアーキテクチャを意味しますが、特定のメッセージングプロトコルの使用を義務付けていません。これは、バイトのストリームをメッセージのストリーム(テキストまたはバイナリ)に変換するTCP上の非常に薄いレイヤーであり、それ以上のものではありません。メッセージの意味を解釈するのはアプリケーション次第です。
アプリケーションレベルのプロトコルであるHTTPとは異なり、WebSocketプロトコルでは、フレームワークまたはコンテナーがルーティングまたは処理する方法を知るための十分な情報が着信メッセージにありません。したがって、WebSocketは、非常に些細なアプリケーション以外には、間違いなく低レベルです。それは可能ですが、その上にフレームワークを作成することにつながる可能性があります。これは、今日のほとんどのWebアプリケーションがサーブレットAPIだけではなくWebフレームワークを使用して作成されている方法に匹敵します。
このため、WebSocketRFCはサブプロトコルの使用を定義しています。ハンドシェイク中に、クライアントとサーバーはヘッダーSec-WebSocket-Protocolを使用して、サブプロトコル、つまり使用する上位のアプリケーションレベルのプロトコルについて合意できます。サブプロトコルを使用する必要はありませんが、使用しない場合でも、アプリケーションはクライアントとサーバーの両方が理解できるメッセージ形式を選択する必要があります。その形式は、カスタム、フレームワーク固有、または標準のメッセージングプロトコルにすることができます。
STOMP —HTTPに 触発されたフレームを使用してスクリプト言語で使用するために元々作成されたシンプルなメッセージングプロトコル。STOMPは広くサポートされており、WebSocketやWebでの使用に適しています。
WebSocket APIを使用すると、Webアプリケーションで双方向通信を処理できますが、STOMPは単純なテキスト指向のメッセージングプロトコルです。
STOMPプロトコルは、WebアプリがWebサーバーとの双方向通信をサポートする必要がある場合に、Webソケット内で一般的に使用されます。
良いチュートリアルは、JeffMesnillによるSTOMPOver WebSocket(2012)です。
STOMPは、Telnet接続やメッセージブローキングサービスなど、WebSocketなしでも使用できます。
また、Raw WebSocketは、STOMPなしで使用できます。STOMPとSockJを使用しないSpringBoot + WebSocketの例。