Ich habe einen Code zum Senden einer Nachricht an alle Benutzer geschrieben:
// websocket and http servers
var webSocketServer = require('websocket').server;
...
...
var clients = [ ];
var server = http.createServer(function(request, response) {
// Not important for us. We're writing WebSocket server, not HTTP server
});
server.listen(webSocketsServerPort, function() {
...
});
var wsServer = new webSocketServer({
// WebSocket server is tied to a HTTP server.
httpServer: server
});
// This callback function is called every time someone
// tries to connect to the WebSocket server
wsServer.on('request', function(request) {
...
var connection = request.accept(null, request.origin);
var index = clients.push(connection) - 1;
...
Bitte beachten Sie:
- Ich habe keine Benutzerreferenz, sondern nur eine Verbindung.
- Alle Benutzerverbindungen werden in einem gespeichert
array
.
Ziel : Angenommen, der Node.js-Server möchte eine Nachricht an einen bestimmten Client (John) senden. Wie würde der NodeJs-Server wissen, welche Verbindung John hat? Der Node.js-Server kennt John nicht einmal. Alles, was es sieht, sind die Verbindungen.
Daher glaube ich, dass ich Benutzer jetzt nicht nur über ihre Verbindung speichern sollte, sondern stattdessen ein Objekt speichern muss, das das userId
und das connection
Objekt enthält.
Idee:
Wenn die Seite vollständig geladen ist (DOM-fähig), stellen Sie eine Verbindung zum Node.js-Server her.
Wenn der Node.js-Server eine Verbindung akzeptiert, generieren Sie eine eindeutige Zeichenfolge und senden Sie sie an den Client-Browser. Speichern Sie die Benutzerverbindung und die eindeutige Zeichenfolge in einem Objekt. z.B
{UserID:"6", value: {connectionObject}}
Wenn diese Nachricht auf der Clientseite eintrifft, speichern Sie sie in einem versteckten Feld oder Cookie. (für zukünftige Anfragen an den NodeJs-Server)
Wenn der Server eine Nachricht an John senden möchte:
Suchen Sie Johns UserID im Wörterbuch und senden Sie eine Nachricht über die entsprechende Verbindung.
Bitte beachten Sie, dass hier (im Nachrichtenmechanismus) kein asp.net-Servercode aufgerufen wird. nur NodeJs. *
Frage:
Ist das der richtige Weg?