angularjs – socket.io手动将用户添加到房间(node.js)
发布时间:2020-12-17 17:41:07 所属栏目:安全 来源:网络整理
导读:我有一个私人工作的聊天应用程序.我的实现是: 1-A用户进入另一个用户配置文件页面并编写消息.在此之后,我正在为这次谈话创造一个空间. socket.join(data.user); 2-Receiver用户将接收此消息(仅此用户),但我不知道如何将此接收者用户加入此房间.所以这基本上
我有一个私人工作的聊天应用程序.我的实现是:
1-A用户进入另一个用户配置文件页面并编写消息.在此之后,我正在为这次谈话创造一个空间. socket.join(data.user); 2-Receiver用户将接收此消息(仅此用户),但我不知道如何将此接收者用户加入此房间.所以这基本上是我的问题.我需要将“手动”这个接收器用户添加到我的房间.这样当我向这个房间广播消息时,消息将发出这两个用户(一个是匿名的,另一个是注册用户).它将提供我的一些代码. 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',tabno : data.tabno }); } }); }); 任何建议对我都很好.谢谢. 解决方法
您在问题中提到的非常私密的房间可能是正确的方法.您需要保留对用户及其各自套接字的引用.然后,一旦匿名 – 或任何其他的 – 用户向注册用户发送私人消息,只需将他们两个加入同一个房间.
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 e.g. 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; } 当然,这是一个非常天真和不完整的解决方案!用户需要有ID,房间也是如此,你需要检查现有的用户名,你也很可能需要保留对房间等的引用,但是你得到了要点,对吧? 另一种方法是使用耳语 – 您可以使用以下内容向一个socket = person发送消息:io.sockets.socket(receiverSocketId).emit(“whisper”,message,extraInfo);.我会建议不要这样做,因为它需要实施来回的窃窃私语,这可能会变得相当混乱. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |