WebSockets - Fonctionnement du serveur

Un serveur Web Socket est un programme simple, qui a la capacité de gérer les événements et les actions Web Socket. Il expose généralement des méthodes similaires à l'API client Web Socket et la plupart des langages de programmation fournissent une implémentation. Le diagramme suivant illustre le processus de communication entre un serveur Web Socket et un client Web Socket, en mettant l'accent sur les événements et actions déclenchés.

Le diagramme suivant montre un serveur Web Socket et un déclenchement d'événement client -

Connexion au serveur Web

Le serveur Web Socket fonctionne de la même manière que les clients Web Socket. Il répond aux événements et effectue des actions si nécessaire. Quel que soit le langage de programmation utilisé, chaque serveur Web Socket effectue des actions spécifiques.

Il est initialisé à une adresse Web Socket. Il gèreOnOpen, OnClose, et OnMessage événements, et envoie également des messages aux clients.

Création d'une instance de serveur Web Socket

Chaque serveur Web Socket a besoin d'un hôte et d'un port valides. Voici un exemple de création d'une instance Web Socket sur le serveur:

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

Toute URL valide peut être utilisée avec la spécification d'un port, qui n'a pas été utilisé auparavant. Il est très utile de garder une trace des clients connectés, car il fournit des détails avec des données différentes ou envoie des messages différents à chacun.

Fleck représente les connexions entrantes (clients) avec le IwebSocketConnectioninterface. Chaque fois que quelqu'un se connecte ou se déconnecte de notre service, une liste vide peut être créée ou mise à jour.

var clients = new List<IWebSocketConnection>();

Après cela, nous pouvons appeler le Startet attendez que les clients se connectent. Après le démarrage, le serveur est capable d'accepter les connexions entrantes. Dans Fleck, la méthode Start a besoin d'un paramètre, qui indique le socket qui a déclenché les événements -

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

Événement OnOpen

le OnOpenL'événement détermine qu'un nouveau client a demandé l'accès et effectue une négociation initiale. Le client doit être ajouté à la liste et probablement les informations associées, telles que l'adresse IP, doivent être stockées. Fleck nous fournit ces informations, ainsi qu'un identifiant unique pour la connexion.

server.Start(socket) ⇒ {

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

Événement OnClose

le OnCloseL'événement est déclenché chaque fois qu'un client est déconnecté. Le client est supprimé de la liste et informe le reste des clients de la déconnexion.

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

Événement OnMessage

le OnMessageL'événement est déclenché lorsqu'un client envoie des données au serveur. Dans ce gestionnaire d'événements, le message entrant peut être transmis aux clients, ou probablement en sélectionner uniquement certains.

Le processus est simple. Notez que ce gestionnaire prend une chaîne nomméemessage comme paramètre -

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

Send (), méthode

le Send()La méthode transmet simplement le message souhaité au client spécifié. En utilisant Send (), du texte ou des données binaires peuvent être stockés sur les clients.

Le fonctionnement de OnMessage l'événement est le suivant -

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