socket.io 1.4.5, node.js 5.x
Вперед: перед этим постом было много чтения, усилий и неудач - так что я надеюсь, что он поможет многим будущим читателям.
Возможность использования комнаты по умолчанию смутила меня, когда я задумываюсь о том, как использовать комнаты для общения с конкретными пользователями (например, прямое сообщение).
Поскольку интуитивно кажется, что это готовое решение, которое потенциально должно исключить необходимость создания настраиваемой комнаты для каждого пользователя, используя его идентификатор пользователя или адрес электронной почты, например это популярное решение.
И поскольку он создается автоматически, я решил, что это должен быть мой единственный уникальный слушатель для каждого пользователя.
Что привело мою должную осмотрительность к созданию этого решения:
io.on('connection', function(socket){
var curretUserID = null
socket.on('set user',function(user){
userID = curretUserID.id
});
io.to(socket.id).emit('welcome','welcome to the room!)
socket.on('chat message', function(msg){//Makes Sense
io.emit('chat message', msg);
});
socket.on('private message', function(id, msgData){
if(userID === msg.recipientID){
socket.to(id).emit('private message', 'for your eyes only');
}
});
});
Я установил userID
жить внутри родительской области connection
, чтобы избежать необходимости создавать карту между пользователями и сокетами, потому что якобы это должно быть преимуществом использования решения для комнаты в целом.
Сейчас я не видел, чтобы кто-то делал это таким образом, поэтому я понятия не имею, полностью ли я иду в непредусмотренном направлении с комнатами по умолчанию, или если по какой-то причине это не масштабируется и не работает хорошо в дикой природе.
Вопрос:
Является ли это одним из предполагаемых вариантов использования комнаты по умолчанию или создание настраиваемой комнаты (как в популярном ответе, упомянутом выше) по-прежнему является текущим способом обработки сообщений, специфичных для пользователя?