WebSockets - Funcionamiento del servidor

Un servidor Web Socket es un programa simple, que tiene la capacidad de manejar eventos y acciones de Web Socket. Por lo general, expone métodos similares a la API del cliente Web Socket y la mayoría de los lenguajes de programación proporcionan una implementación. El siguiente diagrama ilustra el proceso de comunicación entre un servidor Web Socket y un cliente Web Socket, enfatizando los eventos y acciones desencadenados.

El siguiente diagrama muestra la activación de un evento de cliente y servidor Web Socket:

Conectarse al servidor web

El servidor Web Socket funciona de manera similar a los clientes Web Socket. Responde a eventos y realiza acciones cuando es necesario. Independientemente del lenguaje de programación utilizado, cada servidor Web Socket realiza algunas acciones específicas.

Se inicializa en una dirección Web Socket. Lo manejaOnOpen, OnClose, y OnMessage eventos y también envía mensajes a los clientes.

Creación de una instancia de servidor Web Socket

Cada servidor Web Socket necesita un host y un puerto válidos. Un ejemplo de creación de una instancia de Web Socket en el servidor es el siguiente:

var server = new WebSocketServer("ws://localhost:8181");

Se puede usar cualquier URL válida con la especificación de un puerto, que no se usó anteriormente. Es muy útil llevar un registro de los clientes conectados, ya que brinda detalles con diferentes datos o envía diferentes mensajes a cada uno.

Fleck representa las conexiones entrantes (clientes) con el IwebSocketConnectioninterfaz. Siempre que alguien se conecta o desconecta de nuestro servicio, se puede crear o actualizar una lista vacía.

var clients = new List<IWebSocketConnection>();

Después de eso, podemos llamar al Starty espere a que los clientes se conecten. Después de comenzar, el servidor puede aceptar conexiones entrantes. En Fleck, el método Start necesita un parámetro, que indica el socket que generó los eventos:

server.Start(socket) =>
{
});

Evento OnOpen

los OnOpenEl evento determina que un nuevo cliente ha solicitado acceso y realiza un protocolo de enlace inicial. El cliente debe agregarse a la lista y probablemente la información relacionada con él, como la dirección IP. Fleck nos proporciona dicha información, así como un identificador único para la conexión.

server.Start(socket) ⇒ {

   socket.OnOpen = () ⇒ {
      // Add the incoming connection to our list.
      clients.Add(socket);
   }
	
   // Handle the other events here...
});

Evento OnClose

los OnCloseEl evento se genera cada vez que se desconecta un cliente. El Cliente se elimina de la lista e informa al resto de clientes sobre la desconexión.

socket.OnClose = () ⇒ {
   // Remove the disconnected client from the list.
   clients.Remove(socket);
};

Evento OnMessage

los OnMessageEl evento se genera cuando un cliente envía datos al servidor. Dentro de este controlador de eventos, el mensaje entrante se puede transmitir a los clientes, o probablemente seleccionar solo algunos de ellos.

El proceso es sencillo. Tenga en cuenta que este controlador toma una cadena llamadamessage como parámetro -

socket.OnMessage = () ⇒ {
   // Display the message on the console.
   Console.WriteLine(message);
};

Método Send ()

los Send()El método simplemente transmite el mensaje deseado al cliente especificado. Con Send (), los datos de texto o binarios se pueden almacenar entre los clientes.

El funcionamiento de OnMessage El evento es el siguiente:

socket.OnMessage = () ⇒ {
   foreach (var client in clients) {
      // Send the message to everyone!
      // Also, send the client connection's unique identifier in order
      // to recognize who is who.
      client.Send(client.ConnectionInfo.Id + " says: " + message);
   }
};