我问自己:“我怎么能向特定用户触发IO事件(比如某事情成功时的通知)”。但是在帖子请求例如我没有任何套接字对象。
我希望能够这样做:(我应该将套接字对象存储在cookie中吗?还是有其他可能的可用性?)
app.post('/askChangeUserPass', ChangePassIfCorrect , function (req, res){
if (req.session) {
if ( req.data == 1 ){
return res.send("1") // socket.emit("notification", {})
} else {
return res.send("req.data") // socket.emit("notification", {})
}
} else {
return res.render("404")
}
});
由于看起来您已经为每个用户创建了一个会话,因此通常的方法是在用户使用socket.io连接时将socket.id
存储在会话中。然后,从任何http请求,您可以从会话中获取socket.id
并使用:
// get socketid from session
io.to(socketid).emit(...)
要在socket.io和express之间共享会话,请参阅:
How to share sessions with Socket.IO 1.x and Express 4.x?
并且,当在connect
事件中创建socket.io连接时,您可以将socket.id设置为会话。