如何在nodejs中获取每个连接用户的套接字对象?

时间:2018-05-10 14:03:37

标签: javascript node.js socket.io



我正在使用socket.io为用户发出通知。

我有一个监听活动的听众。

this.setState({
    data: this.state.data.concat([newRecord])
});

我想使用socket.io向相关用户发出消息。 我正在考虑通过userID在内存中存储套接字对象;

 myEvent.watch ((res,err)=> {
      if (!err) {
        let id = res.userID;
        let msg = res.msg;
        //to implement
        sendMessage(id, msg);
   }
}

然后在sendMessage服务中:

io.on('connection', function (socket) { 
       // memoryStroage is a key-value sotrage.
        memoryStorage.put(socket.id, socket);
        socket.on('message', function (data) {
            console.log(data);
        });
    });

我想这是一个好方法吗?

1 个答案:

答案 0 :(得分:1)

您应该使用socket.io个房间。

  

Socket.IO中的每个Socket都是由一个随机的,不可思议的,   唯一标识符Socket#id。为了您的方便,每个插座   自动加入由此ID标识的房间。

因此,如果你有套接字ID,你可以使用:

function sendMessage(id, msg) {
   io.to(id).emit('new-message', msg);
}

您也可以使用socket.join

来使用自定义用户ID
io.on('connection', function(socket) {
    // memoryStroage is a key-value sotrage.
    const userId = getUserId(socket); // Get logged user Id somehow
    socket.join(`user-${userId}`);
    /* ... */
});

function sendMessage(id, msg) {
   io.to(`user-${id}`).emit('new-message', msg);
}