Spring boot y websockets

Escenario

Un usuario se conecta con el móvil a su aplicación de empresa. Si es la primera vez que lo hace ésta le pide autorización para recabar su localización. La aplicación manda la localización al servidor y desde el servidor se informa a una página de monitorización. Dicha página está conectada por websocket con el servidor y no necesita recargarse para refrescar las localizaciones de los usuarios en un mapa. La aplicación usa Spring Boot v2.5.4.

Problema

En el tutorial oficial y otros encontrados gracias a Google, dan por hecho usar un cliente de sockjs para conectarse al servicio. En una página oficial de stompjs, sin embargo, sostienen lo contrario:
For Spring STOMP users: There are few tutorials/guides that implicitly suggest that you need SockJS to use STOMP. That is incorrect, you only need SockJS if you need to support old browsers.
Osea que solo es necesario si queremos dar soporte a navegadores anticuados. Dado que la aplicación corre en un entorno empresarial con la versión de navegadores controlada, decido prescindir de él.

Solución

De la parte del servidor vamos a necesitar cuatro ficheros: Un DTO para envolver los mensajes de ida: Otro DTO para los mensajes de vuelta: Un fichero para definir la configuración de los mensajes del websocket: Y un controlador que reciba y envíe los mensajes: Nótese que tenemos una anotación @MessageMapping con el valor /hello. La usamos para especificar que nuestro método recibe mensajes en /stomp/hello. También tenemos la anotación @SendTo con el valor /topic/greetings para mandar los mensajes a aquellos clientes que estén suscritos a dicho recurso. Ahora necesitaremos instalar stomp-js para mandar y recibir mensajes a través de protocolo ws: npm i @stomp/stompjs --save Y el código de javascript sería algo así:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *