La manière la plus simple et la plus élégante
vérifié fonctionnant avec socket.io v3.1.1
C'est aussi simple que :
client.emit("votre message");
Et c'est tout. D'accord, mais comment ça fonctionne?
Exemple minimal de fonctionnement
Voici un exemple d'interaction client-serveur simple où chaque client reçoit régulièrement un message contenant un numéro de séquence. Il y a un numéro de séquence unique pour chaque client et c'est là que le "J'ai besoin d'envoyer un message à un client particulier" entre en jeu.
Serveur
server.js
const
{Server} = require("socket.io"),
server = new Server(8000);
let
sequenceNumberByClient = new Map();
// événement déclenché chaque fois qu'un nouveau client se connecte :
server.on("connection", (socket) => {
console.info(`Client connecté [id=${socket.id}]`);
// initialise le numéro de séquence de ce client
sequenceNumberByClient.set(socket, 1);
// lorsque le socket se déconnecte, le supprimer de la liste :
socket.on("disconnect", () => {
sequenceNumberByClient.delete(socket);
console.info(`Client parti [id=${socket.id}]`);
});
});
// envoie à chaque client son numéro de séquence actuel
setInterval(() => {
for (const [client, sequenceNumber] of sequenceNumberByClient.entries()) {
client.emit("seq-num", sequenceNumber);
sequenceNumberByClient.set(client, sequenceNumber + 1);
}
}, 1000);
Le serveur commence à écouter sur le port 8000 pour les connexions entrantes. Dès qu'une nouvelle connexion est établie, ce client est ajouté à une carte qui suit son numéro de séquence. Le serveur écoute également l'événement déconnexion
pour supprimer le client de la carte lorsqu'il part.
Chaque seconde, une minuterie est déclenchée. Lorsqu'elle est déclenchée, le serveur parcourt la carte et envoie un message à chaque client avec son numéro de séquence actuel, en l'incrémentant juste après. C'est tout. Facile comme bonjour.
Client
La partie client est encore plus simple. Il se connecte simplement au serveur et écoute le message seq-num
, l'imprimant dans la console à chaque fois qu'il arrive.
client.js
const
io = require("socket.io-client"),
ioClient = io.connect("http://localhost:8000");
ioClient.on("seq-num", (msg) => console.info(msg));
Exécution de l'exemple
Installez les bibliothèques requises :
npm install socket.io@3.1.1 socket.io-client@3.1.1
Exécutez le serveur :
node server
Ouvrez d'autres fenêtres de terminal et lancez autant de clients que vous le souhaitez en exécutant :
node client
J'ai également préparé un gist avec le code complet ici.