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í:

Publicaciones Similares

  • TemplateInputException

    Escenario Lo habré hecho centenares de veces. Desarrollo en local, pruebas y despliegue en remoto. Según el entorno en el que esté corriendo la aplicación, ésta podrá requerir una configuración distinta. Por ejemplo en un entorno de desarrollo querremos tener el caché deshabilitado o el nivel de los registros más bajo que en uno de…

  • Usuarios sftp enjaulados con logs para registro de eventos

    Escenario Un cliente nos pide que montemos un servidor FTP para que nos pueda hacer llegar periódimante ficheros con datos. La máquina en la que vamos a configurarlo corre en un ubuntu server 18.04. y tiene instalado un openssh-server. Requisitos Debe utilizar el protocolo SFTP, que ofrece las funcionalidades de FTP sobre el protocolo SSH….

  • Hibernate no puede resolver la propiedad…

    Escenario En una aplicación Spring Boot v2.3.4 hay dos entidades Balance y Shop. Una tienda (shop) puede tener varios saldos y un saldo (Balance) ha de estar relacionado con una tienda. Además existen panaderías (Bakery) y sastrerías (TailorShop) que extienden la clase Shop:

    Y necesito saber cuál es la fecha del…

Deja una respuesta

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