Napisałem kod do rozgłaszania wiadomości do wszystkich użytkowników:
// 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;
...
Proszę zauważyć:
- Nie mam żadnych odniesień użytkownika, ale tylko połączenie.
- Wszystkie połączenia użytkowników są przechowywane w pliku
array
.
Cel : Powiedzmy, że serwer Node.js chce wysłać wiadomość do określonego klienta (Jana). Skąd serwer NodeJs wiedział, jakie połączenie ma Jan? Serwer Node.js nawet nie zna Johna. wszystko, co widzi, to połączenia.
Tak, wierzę, że teraz, nie należy przechowywać tylko przez użytkowników, ich połączenia, zamiast, muszę zapisać obiekt, który będzie zawierał userId
i ten connection
obiekt.
Pomysł:
Po zakończeniu ładowania strony (DOM ready) - nawiąż połączenie z serwerem Node.js.
Gdy serwer Node.js zaakceptuje połączenie - wygeneruj unikalny ciąg i wyślij go do przeglądarki klienta. Przechowuj połączenie użytkownika i unikatowy ciąg w obiekcie. na przykład
{UserID:"6", value: {connectionObject}}
Po stronie klienta, kiedy ta wiadomość dotrze - przechowuj ją w ukrytym polu lub pliku cookie. (dla przyszłych żądań do serwera NodeJs)
Gdy serwer chce wysłać wiadomość do Jana:
Znajdź identyfikator użytkownika jana w słowniku i wyślij wiadomość przez odpowiednie połączenie.
proszę zauważyć, że nie ma tu wywoływanego kodu serwera asp.net (w mechanizmie wiadomości). tylko NodeJs. *
Pytanie:
Czy to właściwa droga?