Die einfachste und eleganteste Lösung
Es ist so einfach wie:
client.emit("your message");
Und das ist es.
Aber wie? Gib mir ein Beispiel
Was wir alle brauchen, ist in der Tat ein vollständiges Beispiel, und das folgt. Dies wird mit der neuesten socket.io-Version (2.0.3) getestet und es wird auch modernes Javascript verwendet (das wir jetzt alle verwenden sollten).
Das Beispiel besteht aus zwei Teilen: einem Server und einem Client. Immer wenn ein Client eine Verbindung herstellt, erhält er vom Server eine periodische Sequenznummer. Für jeden neuen Client wird eine neue Sequenz gestartet, sodass der Server diese einzeln verfolgen muss. Hier kommt das "Ich muss eine Nachricht an einen bestimmten Kunden senden" ins Spiel. Der Code ist sehr einfach zu verstehen. Mal sehen.
Server
server.js
const
io = require("socket.io"),
server = io.listen(8000);
let
sequenceNumberByClient = new Map();
// event fired every time a new client connects:
server.on("connection", (socket) => {
console.info(`Client connected [id=${socket.id}]`);
// initialize this client's sequence number
sequenceNumberByClient.set(socket, 1);
// when socket disconnects, remove it from the list:
socket.on("disconnect", () => {
sequenceNumberByClient.delete(socket);
console.info(`Client gone [id=${socket.id}]`);
});
});
// sends each client its current sequence number
setInterval(() => {
for (const [client, sequenceNumber] of sequenceNumberByClient.entries()) {
client.emit("seq-num", sequenceNumber);
sequenceNumberByClient.set(client, sequenceNumber + 1);
}
}, 1000);
Der Server überwacht Port 8000 auf eingehende Verbindungen. Wenn einer ankommt, fügt er diesen neuen Client einer Karte hinzu, damit er seine Sequenznummer verfolgen kann. Es hört auch auf diesen Kundendisconnect
Ereignis , wenn es von der Karte entfernt wird.
Jede Sekunde wird ein Timer ausgelöst. In diesem Fall durchläuft der Server die Karte und sendet an jeden Client eine Nachricht mit der aktuellen Sequenznummer. Es erhöht es dann und speichert die Nummer wieder in der Karte. Das ist alles was dazu gehört. Kinderleicht.
Klient
Der Client-Teil ist noch einfacher. Es stellt lediglich eine Verbindung zum Server her, wartet auf die seq-num
Nachricht und druckt sie bei jedem Eintreffen auf der Konsole aus.
client.js
const
io = require("socket.io-client"),
ioClient = io.connect("http://localhost:8000");
ioClient.on("seq-num", (msg) => console.info(msg));
Beispiel ausführen
Installieren Sie die erforderlichen Bibliotheken:
npm install socket.io
npm install socket.io-client
Führen Sie den Server aus:
node server
Öffnen Sie andere Terminalfenster und erzeugen Sie so viele Clients, wie Sie möchten, indem Sie Folgendes ausführen:
node client
Ich habe auch bereit , einen Kern mit dem vollständigen Code hier .