Socket IO отправляет на указанный идентификатор пользователя

Я хочу отправить данные указанному пользователю, и больше никому.

на данный момент для вещания всем делаю:

socket.on('newChatMessage', function (message) {
socket.broadcast.emit('newChatMessage_response', { data: message});
});

Теперь то, что я хочу сделать, это просто что-то вроде:

socket.on('newChatMessage', function (message) {
socket.to(5).send('newChatMessage_response', { data: message});
});

для (5) будет пользователь с идентификатором 5.

Ответы на вопрос(2)

как именно это сделать, не видя вашего полного кода, но звучит так, как будто вы хотите вызватьemit метод на отдельном сокете, который вы пытаетесь отправить. Если это отличается от сокета, устанавливающего соединение (т. Е. Частный партнер по чату), то вам потребуется другой способ хранения и извлечения правильного сокета, с которым вы пытаетесь установить связь.

var sck = someFunctionToGetAppropriateSocketObject();
sck.emit('newChatMessage_response', { data: message});

видетьhttp://socket.io/#how-to-use а такжеhttps://github.com/learnboost/socket.io

 Dylan Cross05 февр. 2012 г., 00:22
jsfiddle.net/KMfgL Это показывает мой код
 Jesse Fulton05 февр. 2012 г., 02:03
Э-э-э ... не используйте расположение индекса массива в качестве идентификатора -особенно если вы модифицируете этот массив. Попробуйте сделатьusers объект (вместо массива) и делать что-то вроде key = socketID, value = socket. Это должно позволить вам получить фактический объект сокета на основе идентификатора. (Или попробуйте то, что @fourk упоминает ниже:var socket = io.sockets.sockets['1981672396123987']; (Непроверенные))
Решение Вопроса

io.sockets.on('connection', function(socket) { ... });- Эта функция выполняется каждый раз, когда происходит событие подключения. И каждый раз, когда происходит это событие, аргумент «socket» ссылается на новый объект сокета, представляющий вновь подключенного пользователя. Затем вам нужно сохранить этот объект сокета где-нибудь так, чтобы вы могли найти его позже, чтобы вызвать для него метод send или emit, если вам нужно отправлять сообщения, которые будут видны только этому сокету.

Вот быстрый пример, который должен начать вас. (ЗаписьЯ не проверял это и не рекомендую, чтобы это был лучший способ сделать то, что вы пытаетесь сделать. Я просто написал это в редакторе ответов, чтобы дать вам представление о том, как вымог делай то, что хочешь делать)

var allSockets = [];
io.sockets.on('connection', function(socket) {
  var userId = allSockets.push(socket);
  socket.on('newChatMessage', function(message) {
    socket.broadcast.emit('newChatMessage_response', {data: message});
  });
  socket.on('privateChatMessage', function(message, toId) {
    allSockets[toId-1].emit('newPrivateMessage_response', {data: message});
  });
  socket.broadcast.emit('newUserArrival', 'New user arrived with id of: ' + userId);
});

Редактировать: если по идентификатору вы ссылаетесь на значение идентификатора, которое назначает socket.io, а не на указанное вами значение, вы можете получить сокет с определенным значением идентификатора, используяvar socket = io.sockets.sockets['1981672396123987']; (приведенный выше синтаксис проверен с использованием socket.io v0.7.9)

 Dylan Cross04 февр. 2012 г., 17:03
Спасибо, но я не могу заставить это работать: вот что я делаю, и ошибка:jsfiddle.net/KMfgL

Ваш ответ на вопрос