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