С Socket.IO вы не ограничены только использованием объекта сокета в обратном вызове функции соединения. Вы можете создать объект, который хранит объект сокета для определенного имени пользователя, и искать сокет, чтобы отправить сообщение, когда клиент отправляет сообщение. Вам нужно будет передавать намеченную цель с каждым сообщением.
Пример:
var sockets = {};
...
io.on('connection', function(socket){
socket.on('set nickname', function (name) {
sockets[name] = socket;
});
socket.on('send message', function (message, to) {
sockets[to].emit(message);
});
});
См. Больше примеров на странице примеров сайта Socket.IO .