SockJSes una librería Javascript que crea un canal de comunicación cross-doamin, full-duplex y de baja latencia entre el navegador y el servidor web.

SockJS contempló en su filosofía crear un API lo más parecida al API WebSockets:

¿Y por qué usarlo en lugar de usar WebSockets?

SockJS tiene una ventaja fundamental sobre usar WebSockets. Por debajo SockJS intenta usar WebSockets nativos, y solo si no puede intenta usar otro protocolo sustituto (configurable).

SockJS está pensada para navegadores modernos y entornos en los que no se puede garantizar el uso del protocolo WebSocket (por ejemplo porque están dentro de un proxy corporativo que no lo soporta).

Además en función del navegador sabe qué protocolo usar:

SockJS se compone de una librería Javascripy y de un implementaciones de servidor en diferentes lenguajes:

(NOTA:Aunque por el código podría parecer que SockJS no comunica por protocolo ws, realmente internamente el sustituye el https: por wsJ

En el caso de que usemos Java en el servidor tenemos varios frameworks vidores que soportan este protocolo, como Atmosphere o Spring.

En Java es usual usar STOMP sobre WebSockets (o sobre StockJS) para el envío de los objetos de intercambio entre navegador y servidor, de modo que tendríamos:

En el navegador:

Conexión:

Recepción de mensajes sobre el método seleccionado como callback:

Envío de mensajes:

Y en la parte Servidor:

La configuración (con el mecanismo SockJS fallback habilitado):

Y la recepción y respuesta de mensajes:

Usando STOMP los datos enviados por el cliente:

Se convierten directamente a esta clase:

Sencillo, no? 😀