2015-11-25 9 views
7

In dieser tollen Antwort https://stackoverflow.com/a/27161986/4358405 gibt es ein Beispiel für die Verwendung von rohen Spring4 WebSockets ohne STOMP-Subprotokoll (und ohne SockJS potenziell).Wie wird eine Nachricht mit rohen Spring 4-WebSockets ohne STOMP gesendet?

Jetzt ist meine Frage: Wie sende ich an alle Kunden? Ich erwartete eine API, um zu sehen, dass ich in ähnlicher Weise mit dem von reinem JSR 356 WebSockets-API verwenden: session.getBasicRemote().sendText(messJson);

Muß ich halte alle WebSocketSession Objekte auf meinem eigenen und dann sendMessage() auf jeden von ihnen nennen?

+0

Hallo, habe die gleiche Frage, die Sie haben: Wie sende ich an alle Kunden? Hattest du die Antwort dafür? Danke für deine Hilfe. –

Antwort

1

Soweit ich weiß und kann aus der Dokumentation here können Sie nicht mit der WebSocketHandler Broadcast senden.

Stattdessen sollten Sie Stomp über WebSocket verwenden, konfiguriert von WebSocketMessageBrokerConfigurer wie beschrieben here.

Verwenden Sie ein SimpMessagingTemplate überall im Code-Nachrichten abonniert Kunden als here

+1

Was genau meinen Sie mit "Sie können das nicht tun"? Ich kann eine Broadcast-API nicht verwenden, weil sie nicht existiert, oder ich kann keine 'List ' wegen anderer mir nicht bekannter Auswirkungen behalten. – TMG

+0

hoffe, meine Bearbeitung hilft Ihnen weiter @TMG –

+0

Ich versuchte SimpMessagingTemplate, aber es ist nicht in der Lage zu senden, es gibt keine Fehler, bitte helfen –

4

beschrieben senden ich eine Lösung gefunden. Im WebSocket-Handler verwalten wir eine Liste von WebSocketSession und fügen eine neue Session für die Funktion afterConnectionEstablished hinzu.

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()); 
} 

Wenn wir übertragen müssen, aufzuzählen nur durch alle Sitzung in der Liste Sitzungen und Nachrichten senden.

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

Hoffe diese Hilfe!

+0

Ich bin mir dieser Lösung bewusst - das sieht genau wie eine Implementierung der Lösung, die ich bereits habe in meiner Frage erwähnt. Ich wollte eher wissen, ob es irgendwelche Nachteile hat und es gibt einen besseren Ansatz oder das ist eigentlich die beste Lösung. – TMG

+0

Also welche Lösung haben Sie mit @TMG? Mache ich die gleiche Lösung hier, hat es gut für dich funktioniert? –

+0

@SepehrGH Zu dieser Zeit habe ich nichts besseres gefunden. Ich habe bei dieser Lösung keine besonderen Probleme gesehen, aber nehmen Sie es nicht als meine Bestätigung. Ich habe bald darauf aufgehört, an diesem Projekt zu arbeiten, und ich kann nicht wirklich sagen, ob es gut funktioniert hat oder nicht. – TMG

Verwandte Themen