来自服务器的Socket.io触发器

时间:2018-03-06 08:22:40

标签: node.js triggers server socket.io notifications

我问自己:“我怎么能向特定用户触发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")
    }

});

2 个答案:

答案 0 :(得分:1)

由于您似乎已经为每个用户创建了一个会话,因此通常的方法是在用户使用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设置为会话。

答案 1 :(得分:0)

另一种方法是让每个客户端在他们第一次连接/登录时加入一个用户特定的通道,然后在以后的任何时候都可以发出该通道以与所有这些实例进行通信。

实例已加入用户特定的频道(通过连接或登录等方式):

socket.join(user.id)

服务器向每个实例发出一条消息(在您的POST请求中):

socket.server.to(user.id).emit(...)