我将用户数据保存在数组中,请参阅下面的代码 服务器代码
socket.on('add user', function(data) {
if (users.indexOf(data.id) == -1) {
users.push({
id: socket.id,
userId: data.id,
firstName: data.firstName,
lastName: data.lastName
});
}
len = users.length;
len--;
io.emit('user join', users, users[len].userId, users[len].id);
});
我从前端向用户发送请求,首先我检查用户是否在线,以便向特定用户发送请求。如果用户在那里,我将根据我发送的数据将用户 socket.id 分配给 userId 变量,请参阅下面的代码 服务器代码
socket.on('addNewFriend', function(userId) {
console.log(userId);
for(var i=0;i<users.length;i++){
if(users[i].userId==userId){
var socketid=users[i].id;
console.log(socketid);
io.to(socketid).emit('addFriend',"hai");
}
}
});
最佳答案
不要只保留套接字 ID,还要保留套接字连接本身。
users.push({
id: socket.id,
socket: socket
userId: data.id,
firstName: data.firstName,
lastName: data.lastName
});
如果使用 map 而不是数组来保存用户会更容易,
users[socket.id] = {
socket: socket
userId: data.id,
firstName: data.firstName,
lastName: data.lastName
}
然后当你想发送消息时,使用socket连接,
users[socketId].socket.emit(/*args*/)
如果您将套接字保存在数组中,则需要手动过滤用户对象,然后执行相同的操作。
编辑:监听器的完整代码如下,
socket.on('addNewFriend', function(userId) {
for(var i=0;i<users.length;i++){
if(users[i].userId == userId){
var socketId = users[i].id;
console.log(socketId);
users[socketId].socket.emit('addFriend', "hai");
}
}
});
关于node.js - 如何从socket.io服务器向特定客户端发送请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47919292/