套接字 - 按ID向用户发送消息

时间:2015-07-29 19:30:34

标签: node.js sockets

我将Node.js与ws(套接字库)一起使用,我在找到特定用户的套接字时遇到了一些麻烦。
当用户连接到我的套接字服务器时,我应该通过他的userID或socketID将他的套接字对象保存在一个大型对象中:

var bigMassiveObject = {};
ws.on('connection', function(socket){
var userID //somehow get the userID
   bigMassiveObject[userID] = socket;
   // to find the socket
   socket = bigMassiveObject[userID];
   socket.send("hi");
})

所以稍后我可以通过该ID向他发送消息,但是保留他的socketID是不是更好?这样我们就不是存储所有套接字,而只是存储ID,然后以某种方式(我不知道)通过该ID向他发送消息 这就是我正在寻找的:

var smallObject = {};
ws.on('connection', function(socket){
var userID //somehow get the userID
   smallObject[userID] = socketID;
   // to find the socket
   var socket = generateSocketObjectBySocketID(socketID);
   socket.send("tada!");
})

所以问题是,无论如何通过socketID(或useID)生成套接字?所以我们不会将所有这些大插座对象存储在内存中,也不会有任何内存泄漏:)

1 个答案:

答案 0 :(得分:1)

简单地说,

这就是你需要的:

  io.to(socket.id).emit("event", data);

每当用户加入服务器时,都会生成包含ID的套接字详细信息。这个ID确实有助于向特定人员发送消息。

首先我们需要将所有socket.id存储在数组中,

var people = {};

  people[name] =  socket.id;

此处名称是接收者名称。例如:

  people["trojan"]=2387423cjhgfwerwer23;

所以,现在我们可以在发送消息时使用接收者名称获取socket.id:

为此我们需要知道recievername.You需要向服务器发出接收者名称。

最后一件事是:

   socket.on('chat message', function(data){
   io.to(people[data.reciever]).emit('chat message', data.msg);
   });

希望这适合你。!!祝你好运