2015-11-25 8 views
7

この偉大な答えhttps://stackoverflow.com/a/27161986/4358405には、生のSpring4 WebSocketをSTOMPサブプロトコルなしで(そして潜在的にSockJSなしで)使用する方法の例があります。生のSpring 4 WebSocketをSTOMPなしで使用してメッセージをブロードキャストする方法はありますか?

私の質問は、すべてのクライアントにどのようにブロードキャストするのですか?私は、純粋なJSR 356件のWebSocketのAPIのそれと類似の方法で使用できるAPIが見込ま:session.getBasicRemote().sendText(messJson);

私は自分のすべてのWebSocketSessionオブジェクトを保持し、それらのそれぞれのsendMessage()を呼び出す必要がありますか?

+0

こんにちは、同じ質問があります。どのようにすべてのクライアントにブロードキャストしますか?あなたはこの答えを持っていましたか?助けてくれてありがとう。 –

答えて

1

私が知っている限り、ドキュメントhereから収集することができますWebSocketHandlerを使用してブロードキャストすることはできません。

代わりにWebSocketよりStompWebSocketMessageBrokerConfigurerと設定してください(here)。

使用して、私は解決策を見つけたhere

+1

"これはできません"と正確にはどういう意味ですか?存在しないのでブロードキャストAPIを使用できません。または、私が気づいていない他の意味があるため、List を保持できません。 – TMG

+0

私の編集がもっとあなたを助けてくれることを願っています@TMG –

+0

SimpMessagingTemplateを試しましたが、送信できません。エラーはありません。 –

4

説明するようにサブスクライブしているクライアントにメッセージを送信するためにあなたのコード内の任意の場所をSimpMessagingTemplate。 WebSocketハンドラでは、WebSocketSessionのリストを管理し、afterConnectionEstablished関数で新しいセッションを追加します。私たちが放送する必要がある場合

private List<WebSocketSession> sessions = new ArrayList<>(); 

synchronized void addSession(WebSocketSession sess) { 
    this.sessions.add(sess); 
} 

@Override 
public void afterConnectionEstablished(WebSocketSession session) throws Exception { 
    addSession(session); 
    System.out.println("New Session: " + session.getId()); 
} 

、単にリスト内のすべてのセッションを介してセッションを列挙し、メッセージを送信します。

for (WebSocketSession sess : sessions) { 
     TextMessage msg = new TextMessage("Hello from " + session.getId() + "!"); 
     sess.sendMessage(msg); 
} 

+0

私はその解決策を認識しています。私の質問で述べた。私はむしろ、それには不利な点があるかどうかを知りたかったのですが、より良いアプローチがあるか、これが実際には最良の解決策です。 – TMG

+0

それでは、どのようなソリューションが@TMGを思いついたのですか?私はここで同じ解決策をしていますが、それはあなたのためにうまくいきましたか? –

+0

@SepehrGHその時、私は何も良く見いだせなかった。私はこの解決策には特別な問題に直面していませんが、それを私の裏書としません。私はすぐにそのプロジェクトに取り掛かりませんでした。それがうまくいくかどうかは本当に分かりません。情報のおかげで – TMG