Я написал код для трансляции сообщения всем пользователям:
Используемый код: (краткий)
// 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;
...
Обратите внимание:
- У меня нет ссылки на пользователя, а только соединение.
- Все подключения пользователей хранятся в
array
.
Цель: скажем, что сервер NodeJs хочет отправить сообщение клиенту конкретному (John).
И вот вопрос:
-
Как сервер NodeJs знает, какое соединение имеет Джон?
Сервер NodeJs даже не знает Джона. все, что он видит, это соединения.
Итак,
Я считаю, что теперь я не должен хранить пользователей только по их соединению, вместо этого мне нужно сохранить объект, который будет содержать объект userId
и connection
.
И вот моя идея:
-
Когда загрузка страницы заканчивается (Dom ready) - установите соединение с сервером NodeJs.
-
Когда сервер NodeJs принимает соединение - генерирует уникальную строку и отправляет ее в клиентский браузер. Храните пользовательское соединение и уникальную строку в объекте. , например
{UserID:"6" , value :{connectionObject}}
-
На стороне клиента, когда приходит это сообщение, сохраните его в скрытом поле или в файле cookie. (для будущих запросов к серверу NodeJs)
Когда сервер хочет отправить сообщение Джону:
- Найти john UserID в словаре и отправить сообщение по соответствующему соединению.
Обратите внимание, что здесь нет кода сервера asp.net, который находится здесь (в механизме сообщения). только NodeJs.
Вопрос:
Это правильный путь? (или я что-то пропустил?)