我正在使用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);
});
});
我想这是一个好方法吗?
答案 0 :(得分:1)
您应该使用socket.io
个房间。
Socket.IO中的每个Socket都是由一个随机的,不可思议的, 唯一标识符Socket#id。为了您的方便,每个插座 自动加入由此ID标识的房间。
因此,如果你有套接字ID,你可以使用:
function sendMessage(id, msg) {
io.to(id).emit('new-message', msg);
}
您也可以使用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);
}