socket.io手动添加用户到空间(node.js)

我有一个私人工作的聊天应用程序。我的实现是:

1 – 用户进入另一个用户configuration文件页面并写入消息。 在此之后,我为这个对话创造了一个空间。

socket.join(data.user); 

2 – 接收者用户将采取这个消息(只有这个用户),但我不知道我怎么可以join这个接收机用户到这个房间。 所以这是我的问题基本上。 我需要添加“手动”这个接收机用户到我的房间。 这样当我把消息广播到这个房间的时候,消息就会发出这两个用户(一个是匿名的,另一个是注册用户)。 它会提供我的一些代码。

 server .on('connection', function(socket) { server.to(socket.id).emit('yourSocketId',{ socketid : socket.id,connectedDate : Date.now }); socket.on('AnonymousMessage', function(data) { if(data.isanon == true) { socket.join(data.user); server.to(data.user).emit('AnonymousBroadcast', { message: data.message, user: data.user, isanon : data.isanon, date : data.date, tabno : data.tabno }); } else { socket.join(****); //-- I need add manually here this registered user to anonymous user room server.to(**anonymousroomname**).emit('AnonymousBroadcast', { message: data.message, user: data.user, isanon : data.isanon, date : data.date, tabno : data.tabno }); } }); }); 

任何build议对我来说都很好。 谢谢。

你提到的那些非常私人的房间可能是这样做的正确方法。 尽pipe如此,您仍然需要保持对用户及其各自的套接字的引用。 然后,一旦匿名 – 或者任何其他事情 – 用户发送私人信息给注册用户,只需将他们两个join到同一个房间。

 var io = require('socket.io')(http); sockets = []; people = {}; io.on('connection', function (socket) { sockets.push(socket); //join the server io.on('join', function(name){ people[socket.id] = {name: name}; }) //disconnect from the server io.on('disconnect', function(){ delete people[socket.id]; sockets.splice(sockets.indexOf(socket), 1); }); //initiate private message io.on('initiate private message',function(receiverName, message){ var receiverSocketId = findUserById(receiverName); if(receiverSocketId){ var receiver = people[receiverSocketId]; var room = getARoom(people[socket.id], receiver); //join the anonymous user socket.join(room); //join the registered user sockets[receiverSocketId].join(room); //notify the client of this io.sockets.in(room).emit('private room created', room, message); // } }); io.on('send private message', function(room, message){ io.sockets.in(room).emit('private chat message', message); }); } //you could use eg underscore to achieve this ( function findUserByName(name){ for(socketId in people){ if(people[socketId].name === name){ return socketId; } } return false; } //generate private room name for two users function getARoom(user1, user2){ return 'privateRooom' + user1.name + "And" + user2.name; } 

当然,这是一个非常天真和不完整的解决scheme! 用户需要id ,房间也是这样,你需要检查现有的用户名,你也很可能需要持有房间的参考等,但你得到的主意,对不对?

另一种方法是使用窃窃私语 – 你可以发送一个消息给一个socket =使用下面的人: io.sockets.socket(receiverSocketId).emit("whisper", message, extraInfo); 。 我build议不要这样做,因为它需要实施悄然来回的窃窃私语。