En mi publicación de blog anterior, Socket.io, presenté brevemente el uso básico de Socket.io y creé una simple demostración de sala de chat. Según el capítulo introductorio, este artículo continúa explorando el uso avanzado de Socket.io. Este artículo comenzará desde la configuración, habitaciones, eventos, etc., e introducirá algunas API y precauciones prácticas en Socket.io.
1. Configuración
Socket.io proporciona 4 API de configuración: io.configure, io.set, io.enable, io.disable. io.set establece el elemento único, y io.enable y io.disable se usan para establecer la configuración booleana en un solo elemento. io.configure le permite configurar diferentes parámetros para diferentes entornos de producción (como desarrollo, prueba, etc.). A continuación se define las diferentes configuraciones de Socket.io en dos entornos:
La copia del código es la siguiente:
var io = request ('Socket.io'). Listen (80);
io.configure ('desarrollo', function () {
IO.ENABLE ('ETAG CLIENTE DE BROWSER');
io.set ('nivel de registro', 1);
});
io.configure ('liberar', function () {
io.set ('transports', ['WebSocket']);
});
Los siguientes enumeran algunos elementos de configuración comúnmente utilizados. Para parámetros de configuración específicos, consulte el wiki oficial.
1. Socket.io admite una variedad de formas de realizar una comunicación instantánea en línea, como WebSocket, encuestas, etc. Esta configuración le permite elegir el método de comunicación de respaldo usted mismo.
2.
3.
2. Habitación
La habitación es una característica muy útil proporcionada por Socket.io. La sala es equivalente a proporcionar un espacio de nombres para algunos clientes especificados, y todas las transmisiones y comunicaciones en la sala no afectarán a los clientes fuera de la habitación.
En la introducción, sabemos que Socket.Join ('Nombre de la habitación') se puede usar para ingresar a la habitación por cliente, y Socket.leave ('Nombre de la habitación') se usa para salir de la habitación. Cuando el cliente ingresa a una habitación, el mensaje se puede transmitir en la habitación de dos maneras:
La copia del código es la siguiente:
// 1. Transmitir un evento a mi habitación, y se excluirá el remitente (es decir, no se recibirá ningún mensaje)
io.sockets.on ('conexión', function (socket) {
// Nota: En comparación con lo siguiente, aquí es enviar eventos desde la perspectiva del cliente
Socket.broadcast.to ('My Room'). emit ('event_name', data);
}
// 2. Transmitir un evento a otra habitación, y todos los clientes en esta sala recibirán un mensaje
// Nota: En comparación con lo anterior, aquí es enviar eventos desde la perspectiva del servidor
io.sockets.in ('otra habitación'). emit ('event_name', data);
// transmitido a todos los clientes
io.sockets.emit ('event_name', data);
Además de transmitir mensajes a la habitación, también puede obtener información de la habitación a través de la siguiente API.
La copia del código es la siguiente:
// Obtener información sobre todas las habitaciones
// La clave es el nombre de la habitación, el valor es la matriz de identificación del socket correspondiente al nombre de la habitación
io.sockets.manager.omss
// Obtenga al cliente en particular habitación y devuelva todas las instancias de Socket en esta habitación
io.sockets.clients ('habitación particular')
// Obtenga la información de la habitación ingresada por este socket a través de Socket.id
io.sockets.manager.roomclients [Socket.id]
3. Eventos
Socket.io tiene algunos eventos predeterminados incorporados. Al diseñar eventos, debemos evitar los nombres de eventos predeterminados y usar de manera flexible estos eventos predeterminados.
Eventos del lado del servidor:
1) .io.sockets.on ('conexión', función (socket) {}): activado después de que la conexión de socket sea exitosa, utilizada para la inicialización
Socket.on ('Mensaje', function (mensaje, devolución de llamada) {}): este evento se activa cuando el cliente transmite un mensaje a través de Socket.send. El mensaje es el mensaje transmitido. La devolución de llamada es la devolución de llamada que se ejecutará después de recibir el mensaje.
2) .socket.on ('cualquier cosa', function (data) {}): disparado cuando se recibe cualquier evento
3) .socket.on ('desconectar', function () {}): desencadena cuando el socket pierde la conexión (incluidas las situaciones de desconexión, como cerrar el navegador, desconectar activamente, desconectar, etc.)
Eventos del cliente:
1) .conectación: la conexión es exitosa
2). Conexión: Conectación
3). Disconectación: desconectar
4) .connect_failed: la conexión falló
5) .Error: ocurrió un error y no puede ser procesado por otros tipos de eventos.
6) .Message: el mismo evento de mensaje del lado del servidor
7). Anything: cualquier evento en el mismo servidor
8).
9).
10). Reconexión: reconectando
Aquí debemos mencionar el pedido cuando el Socket del cliente inicia la conexión. Cuando la primera conexión está conectada, el orden de activación del evento es: Connect-> Connect; Cuando se pierde la conexión, el orden de activación del evento es: desconectar-> reconexión (se puede realizar varias veces)-> conectación-> reconexión-> conectar-> conectar.
4. Autorización
1). Transmitido a todos los clientes: Socket.Broadcast.Emit ('Mensaje de transmisión');
2). Ingrese una habitación (¡muy fácil de usar! Es equivalente a un espacio de nombres, que se puede transmitir a una habitación específica sin afectar a los clientes en otras habitaciones o no en la habitación): Socket.JOIN ('Nombre de su habitación');
3). Mensaje de transmisión a una habitación (el remitente no puede recibir el mensaje): Socket.Broadcast.TO ('Nombre de su habitación'). EMIT ('Mensaje de habitación de transmisión');
4). Mensajes de transmisión a una habitación (incluido el remitente puede recibir mensajes) (esta API pertenece a io.sockets): io.sockets.in ('Otra sala de habitaciones'). EMIT ('Mensaje de sala de transmisión');
5). Force WebSocket Communication: (Cliente) Socket.send ('Hi'), (servidor) Use Socket.on ('Mensaje', Funcion (Data) {}) para recibir.
Esta es básicamente la introducción al uso avanzado de Socket.io. Personalmente, siento que estas API básicas son suficientes en el uso diario, lo que también refleja la filosofía de diseño extremadamente simple y fácil de usar de Socket.io. Este artículo es solo una forma de llamar la atención. Al encontrar problemas que no se pueden resolver en uso real, será mejor verificar el wiki detallado oficial.