После подключения к серверу каждый раз, когда Data
приходит от этой связи (Socket.on('data',...)
), сервер извлекает UserID
из Data
и проверить ClientList
(массив объектов сокетов), чтобы увидеть, если сокет с этим UserID
существует в ClientList
, если нет: прибавляет UserID
как объект Socket
, а затем добавляет Socket
объект до Client list
.NodeJs Программирование сокетов, как обрабатывать и управлять сокетами? (Без использования socket.io) Каков эффективный способ?
Таким образом, когда пользователь с ID = 1 хочет отправить сообщение пользователю с ID = 2, поиск сервера для Розетка с UserID = 2 в ClientList
, чтобы найти правильный Socket
и отправить пользователь 1 в сообщение найденных Socket
(пользователя 2).
Я пытаюсь выполнить это без использования socket.io
! Вот что сделал мой работодатель! :))
Теперь мой вопрос: я делаю это правильно? Эффективно ли проверять массив ClientList
(каждый раз, когда соединение отправляет данные), чтобы узнать, существует ли этот UserID
в ClientList
? если нет, то каков правильный и эффективный способ? у меня нет проблем с моим кодом, и он работает. но что, если есть тысячи соединений?
Любой пример кода, пример или ссылка будут оценены. Спасибо.
вот псевдо-код:
var net = require('net');
var Server = net.createServer();
var myAuth = require('./myAuth');
var ClientList = [];
Server.on('connection', function(Socket){
Socket.UserData = {}; // I want to add user data as a property to Socket
Socket.on('data', function (Data) {
var userID = myAuth.Authenticate_and_getUserID(Data);
if(userID != undefined){
var found = false;
ClientList.filter(function(item){
// check if Socket is in ClientList
if(item.UserData.ID == userID){
// client was connected before
found = true;
}
});
if(!found){
// this is a new connection, Add it to ClientList
Socket.UserData.ID = userID;
ClientList.push(Socket);
}
}
Socket.once('close', function(has_error){
var index = ClientList.indexOf(Socket);
if (index != -1){
ClientList.splice(index, 1);
console.log('Client closed (port=' + Socket.remotePort + ').');
}
});
});
UPDATE для уточнения:
это эффективный смотреть в ClientList
каждый раз, когда Data
подходит к серверу, чтобы проверить на receiverID (наличие приемника) и обновить ClientList
с текущим подключением UserID
, если не существует?
Как я могу управлять новыми подключениями (пользователями) и хранить их на сервере для позже использовать, когда число пользователей составляет тысячи или миллионы! НЕ 10 или 100. Как это делает socket.io
?
позже обыкновений может быть:
проверка, чтобы увидеть, если один конкретный пользователь находится в сети (есть объект в
ClientList
) сообщение в реальном времениотправить пользователю, если он/она онлайн
и т.п. , ,
Попробуйте технологии очереди сообщений, такие как mqtt или rabbitmq – Jain
@Jain спасибо за ваше предложение, но как насчет поиска в 'ClientList'? Использует ли 'mqtt' эту часть? Я обновил свой вопрос. –