Я написав код для трансляції повідомлення для всіх користувачів:
// 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
.
Мета : Скажімо, сервер Node.js хоче надіслати повідомлення певному клієнту (Джон). Звідки сервер NodeJs дізнається, яке з'єднання має Джон? Сервер Node.js навіть не знає Джона. все, що він бачить, - це зв’язки.
Таким чином, я вважаю , що зараз, я не повинен зберігати користувачів тільки їх зв'язку, замість цього, мені потрібно зберігати об'єкт, який буде містити userId
і на connection
об'єкт.
Ідея:
Коли сторінка завершиться завантаження (DOM готовий) - встановіть підключення до сервера Node.js.
Коли сервер Node.js прийме підключення - згенеруйте унікальний рядок і надішліть його клієнтському браузеру. Зберігайте підключення користувача та унікальний рядок в об’єкті. напр
{UserID:"6", value: {connectionObject}}
На стороні клієнта, коли надходить це повідомлення, зберігайте його у прихованому полі або файлі cookie. (для майбутніх запитів до сервера NodeJs)
Коли сервер хоче надіслати повідомлення Джону:
Знайдіть у словнику ідентифікатор користувача John та надішліть повідомлення за відповідним з’єднанням.
будь ласка, зверніть увагу, що тут немає коду сервера asp.net (у механізмі повідомлень). лише NodeJ. *
Питання:
Це правильний шлях?