【问题标题】:how to send request to specific client from socket.io server?如何从 socket.io 服务器向特定客户端发送请求?
【发布时间】:2018-06-03 19:06:37
【问题描述】:

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

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");

        }
    }


});

【问题讨论】:

  • Bharath,您是如何进行以下操作的?虽然接受答案或对答案投票不是强制性的,但这样做很好,因为这是我们鼓励乐于助人的人继续帮助人们的方式。您成功完成这项任务了吗?

标签: node.js sockets npm socket.io


【解决方案1】:

不仅保留套接字 ID,还保留套接字连接本身。

users.push({
    id: socket.id,
    socket: socket
    userId: data.id,
    firstName: data.firstName,
    lastName: data.lastName
});   

如果你使用地图而不是数组来保存用户会更容易,

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");
        }
    }
});

【讨论】:

  • @BharathReddy '如何在前端做'是什么意思
  • socket.on('addNewFriend', function(userId) { for(var i=0;i
  • 在上面的代码中,我从前端发送我的朋友 ID,因为我正在检查 id 并这样做。但是你认为如何与我的朋友 id 进行比较?
  • @Bharath 我没有写完整的代码(希望你能理解这个概念)。最后一行应该只有在你掌握了 socketId 后才执行。让我编辑答案。
猜你喜欢
  • 2019-04-23
  • 2018-11-06
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 2020-07-15
  • 2015-06-15
  • 1970-01-01
相关资源
最近更新 更多