2015-07-29 2 views
0

Я использую Node.js с ws (библиотека сокетов), и у меня возникают небольшие проблемы с поиском сокета определенного пользователя.
, когда пользователь подключается к моему сокету серверу, я должен держать его гнездо objct в большом массивном объекте его идентификатор пользователя или socketID так:Socket - отправить сообщение пользователю ID

var bigMassiveObject = {}; 
ws.on('connection', function(socket){ 
var userID //somehow get the userID 
    bigMassiveObject[userID] = socket; 
    // to find the socket 
    socket = bigMassiveObject[userID]; 
    socket.send("hi"); 
}) 

так, что позже я могу послать ему сообщение, что ID, но не лучше ли держать его идентификатор socketID? таким образом, мы не хранить все гнездо, но только ID, а затем каким-то образом (я не; знаю) послать ему сообщение по этому ID
это то, что я ищу:

var smallObject = {}; 
ws.on('connection', function(socket){ 
var userID //somehow get the userID 
    smallObject[userID] = socketID; 
    // to find the socket 
    var socket = generateSocketObjectBySocketID(socketID); 
    socket.send("tada!"); 
}) 

так вопрос в том, есть ли в любом случае генерировать сокет, через socketID (или useID)? так что мы не будем хранить все эти большие объекты сокетов в памяти и не будет никакой утечки памяти тоже :)

+0

насчет того же пользователя при подключении двух различных вкладок/браузеров/экземпляров.? – coma

+0

, это не проблема, мы можем иметь несколько идентификаторов socketID для одного и того же ID пользователя –

ответ

1

Просто

Это то, что вам нужно:

io.to(socket.id).emit("event", data); 

всякий раз, когда пользователь присоединяется к серверу, будут генерироваться сведения о сокетах, включая ID. Это идентификатор действительно помогает отправить сообщение конкретным людям.

сначала мы должны хранить все socket.ids в массиве,

вар людей = {};

people[name] = socket.id; 

здесь имя регистратора. Пример:

people["trojan"]=2387423cjhgfwerwer23; 

Итак, теперь мы можем получить, что socket.id с именем Ресивер всякий раз, когда мы посылаем сообщение:

для этого нам нужно знать recievername.You нужно излучать имя Ресивер в сервер.

окончательная вещь:

socket.on('chat message', function(data){ 
    io.to(people[data.reciever]).emit('chat message', data.msg); 
    }); 

Надежда это хорошо работает для вас !! Удачи

+0

'ws' - ​​это не то же самое, что' socket.io' – robertklep

+0

да, вы правы @ robertklep..Но его просто для справки. он может получить то, что хочет. !! – Trojan

Смежные вопросы