我将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)生成套接字?所以我们不会将所有这些大插座对象存储在内存中,也不会有任何内存泄漏:)
答案 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);
});
希望这适合你。!!祝你好运