socket example ejemplo java spring spring-mvc websocket stomp

java - example - cómo capturar el evento de suscripción en mi servidor webSocket con Spring 4



websocket java spring (1)

Puede devolver algo directamente a un cliente cuando se suscribe a un destino utilizando un método de controlador @SubscribeMapping . El objeto devuelto no irá al intermediario, sino que se enviará directamente al cliente:

@SubscribeMapping("/chat") public Collection<ChatMessage> chatInit() { ... return messages; }

En el lado del cliente:

socket.subscribe("/app/chat", function(message) { ... });

Mira el ejemplo de chat en GitHub, que muestra este escenario exacto.

Hice una comunicación de socket web simple con Spring 4, STOMP y sock.js, siguiendo este https://spring.io/guides/gs/messaging-stomp-websocket/

Ahora quiero actualizarlo a chat simple. Mi problema es que cuando el usuario se suscribe a una nueva sala de chat, debe pasar los mensajes. No sé cómo capturar el momento en que se suscribió para enviarle la lista de los mensajes.

Intenté usar la anotación de @MessageMapping, pero no tuve éxito:

@Controller public class WebSocketController { @Autowired private SimpMessagingTemplate messagingTemplate; @MessageMapping("/chat/{chatId}") public void chat(ChatMessage message, @DestinationVariable String chatId) { messagingTemplate.convertAndSend("/chat/" + chatId, new ChatMessage("message: " + message.getText())); } @SubscribeMapping("/chat") public void chatInit() { System.out.println("worked"); int chatId = 1; //for example messagingTemplate.convertAndSend("/chat/" + chatId, new ChatMessage("connected")); } }

Entonces creé eso:

@Controller public class ApplicationEventObserverController implements ApplicationListener<ApplicationEvent> { @Override public void onApplicationEvent(ApplicationEvent applicationEvent) { System.out.println(applicationEvent); } }

Funciona, pero captura todos los eventos posibles, no creo que sea una buena práctica.

Entonces, mi pregunta puede ser reformulada: ¿cómo enviar datos iniciales cuando el usuario se suscribe a algo?