Un poco de jWebSocket

El otro día ya nos referimos a jWebSocket en el Blog: https://unpocodejava.wordpress.com/2012/04/24/websockets-en-navegadores-no-html5-jwebsocket/

Como decíamos jWebSocket es una solución de comunicación bidireccional Java+Javascript basada en WebSockets.

Además de ser una implementación de los WebSockets en Java sus características lo hacen muy interesante para cierto tipos de soluciones, veamos algunas de estas características:

· Despliegue: ofrece un conjunto de JARs y de JSs que permiten incluirlo en cualquier aplicación HTML+JS+JEE. También ofrece un modelo para usarlo como extensión de Tomcat.

· Listeners: Los listeners son el mecanimos para procesar mensajes de los clientes WebSockets además de eventos como la conexión o desconexión. Los listeners son propios de cada aplicación (a diferencia de los plugins que sirven para encapsular funcionalidad).

Veamos un ejemplo:

1. Primero desarrollaré mi listener

2. Lo registraré en el Server:

3. Lo registro en el cliente con Javascript:

4. Y finalmente lo uso desde Javascript:

· Plugins: los plugins están pensados para crear extensiones.

o JWebSocket ya ofrece una serie de plugins pero permite crear otros y añadirlos a la cadena de plugins.

o Los plugins se encapsulan como JARs y permiten encapsular funcionalidad.

Veamos como crear un plugin que implementa la funcionalidad de solicitad la hora del Servidor (requestServerTime)

1. Creo el plugin Servidor:

2. Lo registro en el Servidor:

3. Creo la parte cliente del Plugin (también podría hacerlo como un Listener):

4. Uso el plugin:

· RPC: permite desde un cliente web Javascript llamar funciones Java en el Server y recibir el resultado. También permite que el Servidor llame funciones del cliente.

o Permite intercambiar objetos JSON, XML y CSV (este apropiado para objetos tipo clave1=valor1;clave2=valor2;….)

o Soporta Single-Threaded y Multi-Threaded RPCs: en el modelo Single las llamadas hechas desde un cliente se responden en el mismo orden en el que se invocaron.

o llamar funciones remotas

· Channels: permite que las aplicaciones abran diferentes canales lógicos independientes.

o Los canales pueden ser:

§ Públicos: todos los clientes pueden suscribirse a este tipo de canal

§ Privados: para comunicaciones entre 2 o más clientes. Se protegen con un par Access key/secret key. Para suscribirse es necesario saben el id del canal y el Access key.

§ De Sistema: usados por el servidor.

o Existen una serie de métodos para suscribirse, borrase una suscripción, autorizarse,… (subscribe, unsubscribe, getChannels, getSuscriptions, authorize, createChannel,…)

· Tokens: es lo que intercambian los clientes y servidores. Es un objeto que contiene uno o varios conjuntos de clave-valor (en Java es un HashMap).

o Se soportan formatos de Token JSON, CSV y XML.

o A través de los plugins ya implementados existen una serie de Token ya implementados:

§ Tokens S2C (Server To Client): welcome (se envía del cliente al servidor la primera vez que se conecta), goodbye, respondse, event

§ Tokens C2S (Client to Server): login, logout, close, send, echo, broadcast, ping, getClients

· Events: es un plugin que permite ejecutar código en servidor en base a un evento producido

o Integración con Spring: este plugin está integrado con Spring a nivel de IoC, Seguridad (a través de Spring Security) y Validaciones

Se configura:

· Soporte multinavegador: en la tabla se muestran en verde los navegadores que lo soportan a través de HTML5 WebSockets, el resto lo soportan a través del Bridge Flash:

Espero que este repaso os haya servido para aclarar en qué escenarios es interesante el uso de WebSockets…en un próximo artículo hablaremos de Atmosphere y repasaremos otros escenarios en los que aplica su uso.

Respuestas

  1. Buen post, realmente es una solución interesante.

  2. […] hemos hablado aquí de JWebSocket, Atmosphere tiene algunas características que lo diferencian. Veamos un poco de lo que […]

  3. cómo se garantiza la seguridad en la interaccion cliente-servidor
    cómo se garantiza altos niveles de velocidad y escalabilidad en JWS

  4. prefiero socket io xd

Replica a osvaldo Cancelar la respuesta