2016-04-26 7 views
1

githubでspringブートwebsocketを使用するチャットアプリケーションプロジェクトをクローンしました。Springブートwebsocketのクライアントとサーバのマッピングメッセージ

@MessageMapping("/chat.private.{username}") 
public void filterPrivateMessage(@Payload ChatMessage message, @DestinationVariable("username") String username, Principal principal) { 

    message.setUsername(principal.getName()); 
    simpMessagingTemplate.convertAndSend("/user/" + username + "/exchange/amq.direct/chat.message", message); 
} 

例:ここでは はコードですユーザ名変数は次のとおりです。[email protected]、それがサブスクライブし、クライアントのためにリンクを意味は次のようになります。/user/[email protected]/exchange /amq.direct/chat.message

しかし、クライアントコードで:

chatSocket = Stomp.over(new SockJS(url)); //use sockjs and stompjs 
chatSocket.subscribe("/user/exchange/amq.direct/chat.message" 

私がアプリケーションにどのように理解していませんクライアントが別のURL([email protected]なし)を聞くと、正しいクライアントに送信できます。 誰かが私に説明することはできますか?

ありがとうございました。

答えて

2

サブスクライブURLのキーは/user/です。このキーは、特定のユーザーにメッセージを配信するためにSpringによって変換されます。これは、ドキュメントにUser Destinationsセクションに記載されています

アプリケーションは、特定のユーザーをターゲットにメッセージを送信することができ、およびSpringのSTOMPサポートは、この目的のために/user/が付い先を認識します。たとえば、クライアントは宛先/user/queue/position-updatesにサブスクライブすることができます。この宛先はUserDestinationMessageHandlerによって処理され、ユーザセッションに固有の宛先に変換されます。 /queue/position-updates-user123。これは、総称的に名前を付けられた宛先に加入することの利便性を提供すると同時に、同じ宛先に加入する他のユーザとの衝突を防ぎ、各ユーザがユニークな株式ポジション更新を受け取ることができるようにする。

関連する問題