Я думаю, что недостающий фрагмент находится внутри этой функции: 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)