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