socket.io 1.4.5,node.js 5.x
前进:很多阅读、努力和失败都出现在这篇文章之前--所以我希望它能帮助很多未来的读者。
当我考虑如何使用房间进行用户特定的通信时,使用默认房间的选项使我感到困惑(就像直接消息)。
因为从直觉上看,这似乎是一种开箱即用的解决方案,它可能不需要为每个用户创建一个自定义空间,使用他们的this popular solution.或电子邮件,比如。
由于它是自动创建的,我认为它应该是每个用户唯一的唯一侦听器。
这导致我的尽职调查创造了这个解决方案:
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,以避免在用户和套接字之间创建映射的需要,因为这应该是完全使用房间解决方案的优势所在。
现在我没见过有人这样做,所以我不知道我是完全按照预设房间的方向走,还是因为某种原因,这在野外不太好用。
问题:
这是默认房间的预期用途之一,还是创建一个自定义房间(如上面提到的流行答案)仍然是当前处理用户特定通信的方法?
发布于 2016-11-22 14:51:23
很难理解你真正的问题,尤其是当你把所有的变量混在一起时.但我会尽力回答你的问题。
我认为这个问题隐藏在服务器端的套接字in中。Socket.io在每个socket.id上添加名称空间。因此,假设客户端的socket.id是4zIISeXsSvKL6VGyAABe,那么在服务器端是/#4zIISeXsSvKL6VGyAABe。
我希望socket.io团队能够解决这个问题,因为他们在最近的版本中也创建了这个问题。
修复它的方法是,在连接后在客户端更新user.id。
服务器:
io.on('connection', function(socket) {
socket.emit('register id', socket.id)
}客户端:
socket.on('register id', function(id){
socket.id = id
})然后,可以像这样发送一条私人消息
服务器:
io.on('connection', function(
socket.emit('register id', socket.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(msgData){
socket.to(msg.recipientID).emit('private message', 'for your eyes only');
});
});https://stackoverflow.com/questions/35304622
复制相似问题