gpt4 book ai didi

javascript - Nodejs中如何获取每个连接用户的socket对象?

转载 作者:行者123 更新时间:2023-12-03 01:55:07 25 4
gpt4 key购买 nike



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

我有一个监听器来监视事件。

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

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

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

然后在 sendMessage 服务中:

function sendMessage(id, msg) {
let socket = memoryStroage.get(id);
socket.emit('new-message', msg);
}

我想这是一个好方法吗?

最佳答案

您应该使用socket.io房间。

Each Socket in Socket.IO is identified by a random, unguessable, unique identifier Socket#id. For your convenience, each socket automatically joins a room identified by this id.

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

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

您也可以使用自定义用户 ID,使用 socket.join

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

关于javascript - Nodejs中如何获取每个连接用户的socket对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50274774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com