WebSockets - Servidor funcionando

Um servidor Web Socket é um programa simples, que tem a capacidade de manipular eventos e ações do Web Socket. Geralmente, ele expõe métodos semelhantes à API do cliente Web Socket e a maioria das linguagens de programação fornece uma implementação. O diagrama a seguir ilustra o processo de comunicação entre um servidor Web Socket e um cliente Web Socket, enfatizando os eventos e ações acionados.

O diagrama a seguir mostra um servidor Web Socket e o acionamento de eventos de cliente -

Conectando-se ao servidor web

O servidor Web Socket funciona de maneira semelhante aos clientes Web Socket. Ele responde a eventos e executa ações quando necessário. Independentemente da linguagem de programação usada, cada servidor Web Socket executa algumas ações específicas.

Ele é inicializado com um endereço Web Socket. Lida comOnOpen, OnClose, e OnMessage eventos, e também envia mensagens para os clientes.

Criação de uma instância de servidor Web Socket

Cada servidor Web Socket precisa de um host e uma porta válidos. Um exemplo de criação de uma instância do Web Socket no servidor é o seguinte -

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

Qualquer URL válido pode ser usado com a especificação de uma porta, que não foi usada anteriormente. É muito útil manter um registro dos clientes conectados, pois fornece detalhes com dados diferentes ou envia mensagens diferentes para cada um.

Fleck representa as conexões de entrada (clientes) com o IwebSocketConnectioninterface. Sempre que alguém se conecta ou desconecta de nosso serviço, uma lista vazia pode ser criada ou atualizada.

var clients = new List<IWebSocketConnection>();

Depois disso, podemos chamar o Starte espere os clientes se conectarem. Depois de iniciar, o servidor é capaz de aceitar conexões de entrada. Em Fleck, o método Start precisa de um parâmetro, que indica o soquete que gerou os eventos -

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

Evento OnOpen

o OnOpenevento determina que um novo cliente solicitou acesso e executa um handshake inicial. O cliente deve ser adicionado à lista e provavelmente as informações relacionadas a ele devem ser armazenadas, como o endereço IP. Fleck nos fornece essas informações, bem como um identificador único para a conexão.

server.Start(socket) ⇒ {

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

Evento OnClose

o OnCloseevento é gerado sempre que um cliente é desconectado. O cliente é removido da lista e informa o resto dos clientes sobre a desconexão.

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

Evento OnMessage

o OnMessageO evento é gerado quando um cliente envia dados ao servidor. Dentro desse manipulador de eventos, a mensagem recebida pode ser transmitida aos clientes, ou provavelmente selecionar apenas alguns deles.

O processo é simples. Observe que este manipulador recebe uma string chamadamessage como um parâmetro -

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

Método Send ()

o Send()método simplesmente transmite a mensagem desejada para o cliente especificado. Usando Send (), dados de texto ou binários podem ser armazenados nos clientes.

O trabalho de OnMessage evento é o seguinte -

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);
   }
};