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

  • |

    Cómo ampliar el espacio en disco en 1and1

    Escenario Hemos contratado un servidor dedicado en 1and1 (ubuntu 14.04) y al acceder por ssh constatamos que no disponemos de todo el espacio en disco disponible: $ df -hFilesystem Size Used Avail Use% Mounted onudev 3.9G 4.0K 3.9G 1% /devtmpfs 798M 592K 797M 1% /run/dev/md1 4.0G 990M 3.0G 25% /none 4.0K 0 4.0K 0% /sys/fs/cgroupnone 5.0M 0 5.0M 0% /run/locknone 3.9G 0 3.9G 0% /run/shmnone 100M 0 100M 0% /run/user/dev/mapper/vg00-usr 4.8G 1.3G 3.3G 28% /usr/dev/mapper/vg00-var 4.8G 812M 3.8G 18% /var/dev/mapper/vg00-home 4.8G 10M 4.6G 1% /home Objetivo Aumentar el espacio disponible para dar cabida a nuestros recursos. Solución Nota: sólo aplicable a sistemas linux Primer paso Comprobamos el espacio en disco real: ~$ sudo fdisk -lDisk /dev/sda: 240.1 GB, 240057409536 bytes255 heads, 63 sectors/track, 29185 cylinders, total 468862128 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (logical/physical): 512 bytes / 4096 bytesI/O size (minimum/optimal): 4096 bytes / 4096 bytesDisk identifier: 0x24e3fc12   Device Boot      Start         End      Blocks   Id  System/dev/sda1            2048     8390655     4194304   fd  Linux raid autodetect/dev/sda2         8390656    12584959     2097152   82  Linux swap / Solaris/dev/sda3        12584960   468862127   228138584   fd  Linux raid autodetect Segundo…

  • Me obligaron a hacerlo

    Si eres programador y trabajas por cuenta ajena, probablemente alguna vez te haya tocado implantar una solución o funcionalidad en contra de lo que consideras básicos principios del sentido común. Después de todo, el cliente paga para que se haga lo que dice, independientemente de estándares, usabilidad o costes inútiles.

  • Sustitución del mapeo original de FOSUserBundle en symfony2

    Para un nuevo proyecto en PHP que estamos empezando, hemos decidido utilizar la plataforma symfony2. En el pasado he tenido la suerte de trabajar, disfrutar y aprender con symfony 1.x, gracias a su coherente organización, buen uso del PHP y unos robustos cimientos fundados en una extensa documentación y una vasta comunidad de activos desarrolladores.

  • 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…

Deja una respuesta

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