node.js - 如何从socket.io服务器向特定客户端发送请求?

标签 node.js sockets npm socket.io

我将用户数据保存在数组中,请参阅下面的代码 服务器代码

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/

相关文章:

javascript - 如何让我的代码更清晰

php - 如何使用 Heroku 部署 Laravel + Vue 项目

带有 "watchdog"的 Ruby 线程

javascript - Socket.io - 无法连接到客户端

node.js - npm 安装 ts-md5 错误

javascript - 接近堆限制的无效标记压缩分配失败 - JavaScript 堆内存不足

sql-server - 如何使用 SQL Server 配置 Passportjs?

javascript - 如何一一执行url请求而不导致堆栈溢出? ( Node .JS)

php - 在共享主机上打开套接字

node.js - 无法在 Linux 上安装 @angular/cli