WebSocket - Server funzionante
Un server Web Socket è un semplice programma che ha la capacità di gestire eventi e azioni Web Socket. Di solito espone metodi simili all'API del client Web Socket e la maggior parte dei linguaggi di programmazione fornisce un'implementazione. Il diagramma seguente illustra il processo di comunicazione tra un server Web Socket e un client Web Socket, sottolineando gli eventi e le azioni attivati.
Il diagramma seguente mostra un server Web Socket e l'attivazione di eventi client:
Connessione al Web Server
Il server Web Socket funziona in modo simile ai client Web Socket. Risponde agli eventi ed esegue azioni quando necessario. Indipendentemente dal linguaggio di programmazione utilizzato, ogni server Web Socket esegue alcune azioni specifiche.
Viene inizializzato su un indirizzo Web Socket. GestisceOnOpen, OnClose, e OnMessage eventi e invia messaggi anche ai client.
Creazione di un'istanza del server Web Socket
Ogni server Web Socket richiede un host e una porta validi. Un esempio di creazione di un'istanza di Web Socket nel server è il seguente:
var server = new WebSocketServer("ws://localhost:8181");
Qualsiasi URL valido può essere utilizzato con la specifica di una porta, che non è stata utilizzata in precedenza. È molto utile tenere un registro dei client collegati, poiché fornisce dettagli con dati diversi o invia messaggi diversi a ciascuno.
Fleck rappresenta le connessioni in entrata (client) con IwebSocketConnectioninterfaccia. Ogni volta che qualcuno si connette o si disconnette dal nostro servizio, è possibile creare o aggiornare un elenco vuoto.
var clients = new List<IWebSocketConnection>();
Dopodiché, possiamo chiamare il file Startmetodo e attendere che i client si connettano. Dopo l'avvio, il server è in grado di accettare le connessioni in entrata. In Fleck, il metodo Start richiede un parametro, che indica il socket che ha generato gli eventi -
server.Start(socket) =>
{
});
Evento OnOpen
Il OnOpenL'evento determina che un nuovo client ha richiesto l'accesso ed esegue un handshake iniziale. Il client dovrebbe essere aggiunto all'elenco e probabilmente le informazioni dovrebbero essere memorizzate ad esso correlate, come l'indirizzo IP. Fleck ci fornisce tali informazioni, nonché un identificatore univoco per la connessione.
server.Start(socket) ⇒ {
socket.OnOpen = () ⇒ {
// Add the incoming connection to our list.
clients.Add(socket);
}
// Handle the other events here...
});
Evento OnClose
Il OnCloseviene generato ogni volta che un client viene disconnesso. Il client viene rimosso dall'elenco e informa il resto dei client della disconnessione.
socket.OnClose = () ⇒ {
// Remove the disconnected client from the list.
clients.Remove(socket);
};
Evento OnMessage
Il OnMessageviene generato quando un client invia dati al server. All'interno di questo gestore di eventi, il messaggio in arrivo può essere trasmesso ai client, o probabilmente selezionarne solo alcuni.
Il processo è semplice. Nota che questo gestore accetta una stringa denominatamessage come parametro -
socket.OnMessage = () ⇒ {
// Display the message on the console.
Console.WriteLine(message);
};
Metodo Send ()
Il Send()il metodo trasmette semplicemente il messaggio desiderato al client specificato. Utilizzando Send (), i dati di testo o binari possono essere archiviati tra i client.
Il funzionamento di OnMessage l'evento è il seguente -
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);
}
};