Red de conocimiento informático - Material del sitio web - Cómo agregar control de sincronización a WebSocket

Cómo agregar control de sincronización a WebSocket

El protocolo WebSocket es un nuevo protocolo para HTML5. Permite la comunicación full-duplex entre el navegador y el servidor (full-duplex).

Hoy en día, muchos sitios web utilizan el sondeo (sondeo) para lograr una comunicación en tiempo real. El sondeo es un servidor cliente en el que el navegador envía una solicitud HTTP al servidor dentro de un intervalo de tiempo específico (como cada 1 segundo) y luego el servidor devuelve los datos más recientes al navegador. Este modo de solicitud HTTP tradicional tiene desventajas obvias: el navegador necesita enviar solicitudes al servidor continuamente. Sin embargo, el encabezado de la solicitud HTTP es muy largo y los datos contenidos en él pueden ser solo un valor pequeño, lo que ocupará mucho. de ancho de banda.

La última tecnología de sondeo es Comet, que utiliza AJAX, pero aunque esta tecnología puede lograr una comunicación full-duplex, aún requiere enviar una solicitud (reuqest).

En la API WebSocket, el navegador y el servidor solo necesitan realizar un protocolo de enlace, y luego el navegador y el servidor formarán un canal rápido. Luego se forma un canal rápido entre el navegador y el servidor, y los dos pueden enviarse datos directamente entre sí. En este protocolo WebSocket, tenemos dos beneficios principales como implementación de servicio:

1. Encabezado

El encabezado utilizado para la comunicación mutua es muy pequeño: aproximadamente 2 bytes.

2. Push del servidor

El servidor puede enviar datos activamente al cliente

El siguiente es un ejemplo simple de implementación PUSH.

Un ejemplo simple de implementación PUSH es el siguiente:

Código de servidor: socketList = new ArrayList();

super.init(config);

System. out. println("Inicio del servidor============");

}

Lista pública estática getSocketList() {

devuelve InitServlet.socketList;

}

}

clase pública TestWebSocketServlet extiende WebSocketServlet{

final estático privado Registro del registrador = Logger .getLogger(TestWebSocketServlet.class);

/**

*

*

privado estático final largo serialVersionUID = 1L ;

//Contenedor de enlace de almacenamiento

Lista estática privada connsList = new ArrayList();

@Override

StreamInbound protegido createWebSocketInbound(String subProtocol,HttpServletRequest request) {

// TODO genera automáticamente resguardos de métodos

devuelve nuevo WebSocketMessageInbound();

}

clase pública WebSocketMessageInbound extiende MessageInbound{

@ Anulación

protected void onClose(int status) {

// InitServlet.getSocketList().remove(this);

super.onClose(status);

log.debug("onClose");

InitServlet. getSocketList( ).remove(this);

}

@Override

protected void onOpen( WsOutbound saliente) {

log. debug( "onOpen");

super.onOpen(saliente

InitServlet.getSocketList().add(this);

}

@Override

Protect void onBinaryMessage(mensaje ByteBuffer) lanza IOException {

// TODO Método generado automáticamente stub

log.debug("onBinaryMes

sage");

}

@Override

protected void onTextMessage(mensaje CharBuffer) lanza IOException {

//TODO genera automáticamente un código auxiliar de método p>

log.debug("onTextMessage="+message);

// this.getWsOutbound().writeTextMessage( CharBuffer.wrap("===="));

// this.getWsOutbound().writeTextMessage(message);

//Enviar a todos los enlaces

for (MessageInbound messageInbound: InitServlet.getSocketList(). writeTextMessage( mensaje));

// Enviar a todos los enlaces

configuración web.xml

< -- WebSocket -->

initServlet

com.InitServlet

1

websocket

com.demo.websocket.TestWebSocketServlet

< servlet-mapping>

/websocket

Código de interfaz de usuario:

Demostración de WebSoket