Stručný príklad anotácie @SendToUser od spoločnosti Spring Websockets

1. Prehľad

V tomto rýchlom výučbe ukážeme ako poslať správu konkrétnej relácii alebo konkrétnemu používateľovi pomocou Spring WebSockets.

Úvod do vyššie uvedeného modulu nájdete v tomto článku.

2. Konfigurácia WebSocket

V prvom rade musíme nakonfigurujte nášho sprostredkovateľa správ a koncový bod aplikácie WebSocket:

@Configuration @EnableWebSocketMessageBroker verejná trieda WebSocketConfig rozširuje AbstractWebSocketMessageBrokerConfigurer {@Override public void configureMessageBroker (MessageBrokerRegistry config) {config.enableSimpleBroker ("/ topic /", "/ queue /") config.setApplicationDestinationPrefixes ("/ app"); } @Override public void registerStompEndpoints (register StompEndpointRegistry) {registry.addEndpoint ("/ pozdrav"); }}

S @EnableWebSocketMessageBroker my povolila sprostredkovanie správ podporovaných cez WebSocket pomocou STOMP, čo je skratka pre Streaming Text Oriented Messaging Protocol. Je dôležité poznamenať, že túto anotáciu je potrebné používať v spojení s @ Konfigurácia.

Nie je povinné rozširovať AbstractWebSocketMessageBrokerConfigurer pre rýchly príklad je však jednoduchšie prispôsobiť importovanú konfiguráciu.

V prvej metóde sme nastavili jednoduchého sprostredkovateľa správ založeného na pamäti, ktorý prenáša správy späť ku klientovi na cieľových miestach s predponou „/ Topic“ a „/ Fronta“.

A v druhej sme zaregistrovali koncové body dupnutia na „/ Pozdrav“.

V prípade, že chceme povoliť SockJS, musíme upraviť časť registra:

registry.addEndpoint ("/ pozdrav"). withSockJS ();

3. Získajte ID relácie pomocou zachytávača

Jednosmerka na získanie ID relácie pridáva Spring Interceptor, ktorý sa spustí počas podania ruky a získa informácie z údajov žiadosti.

Tento zachytávač je možné pridať priamo do WebSocketConfig:

@Override public void registerStompEndpoints (register StompEndpointRegistry) {register .addEndpoint ("/ pozdrav") .setHandshakeHandler (nový DefaultHandshakeHandler () {public boolean beforeHandshake (požiadavka ServerHttpRequest, požiadavka ServerHttpResponand, odpoveď WebSocks), WebSocks ServletServerHttpRequest) {ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) požiadavka; HttpSession session = servletRequest .getServletRequest (). GetSession (); attributes.put ("sessionId", session.getId ());} return true;}) ; }

4. Koncový bod WebSocket

Počnúc jarom 5.0.5.RELEASE nie je potrebné robiť žiadne prispôsobenia z dôvodu vylepšenia @SendToUser anotácia, ktorá nám umožňuje poslať správu do cieľového miesta používateľa cez "/ user / {sessionId} /…" radšej než "/ user / {user} /…“.

To znamená, že anotácia funguje na základe ID relácie vstupnej správy a efektívne tak odosiela odpoveď do cieľového miesta súkromného pre reláciu:

@Controller verejná trieda WebSocketController {@Autowired private SimpMessageSendingOperations messagingTemplate; súkromný Gson gson = nový Gson (); @MessageMapping ("/ message") @SendToUser ("/ queue / response") public String processMessageFromClient (@Payload String message, Principal principal) vyvolá Exception {return gson .fromJson (message, Map.class) .get ("name" ).natiahnuť(); } @MessageExceptionHandler @SendToUser ("/ queue / errors") public String handleException (Throwable exception) {return exception.getMessage (); }}

Je dôležité poznamenať, že @SendToUser označuje, že návratová hodnota metódy spracovania správ by mala byť odoslaná ako Správa do zadaného cieľ (y) doplnené o „/ user / {username}.

5. Klient WebSocket

function connect () {var socket = new WebSocket ('ws: // localhost: 8080 / pozdrav'); ws = Stomp.over (zásuvka); ws.connect ({}, function (frame) {ws.subscribe ("/ user / queue / errors", function (message) {alert ("Error" + message.body);}); ws.subscribe ("/ používateľ / fronta / odpoveď ", funkcia (správa) {alert (" Správa "+ message.body);});}, funkcia (chyba) {alert (" chyba STOMP "+ chyba);}); } funkcia odpojit () {if (ws! = null) {ws.close (); } setConnected (false); console.log ("Odpojené"); }

Nový WebSocket je vytvorené a ukazuje na „/ pozdrav”Pre mapovanie v WebSocketConfiguration.

Keď klienta prihlásime na odber/ user / queue / errors“A„/ užívateľ / fronta / odpoveď”, Kde používame poznamenané informácie z poslednej časti.

Ako vidíme, @SendToUser ukazuje na "poradie / chyby„Ale správa bude odoslaná na„/ user / queue / errors“.

6. Záver

V tomto článku sme sa zaoberali spôsobom, ako poslať správu priamo používateľovi alebo identifikácii relácie pomocou Spring WebSocket

Celý zdrojový kód príkladov je ako vždy k dispozícii na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found