我有一个express应用程序,它打开了与前端React应用程序的套接字连接。
每当有人用json数据向我的服务器发送post请求时,我想向连接的套接字发出一个事件,但是socket.emit没有在。post回调中激发。然而,io.sockets.emit工作得很好,但在这种情况下对我没有任何用处。
此操作失败:
io.on('connection', (socket) => {
app.post('/event', (req, res) => {
socket.emit('someevent', req.body);
res.sendStatus(200);
}
}
但这件事过去了:
io.on('connection', (socket) => {
app.post('/event', (req, res) => {
io.sockets.emit('someevent', req.body);
res.sendStatus(200);
}
}
斯拉克斯的评论是正确的,但它并没有帮助我解决我的问题。
我最后做的是:
>
/event
的post请求中,我添加了一个包含套接字连接ID的隐藏输入字段。然后在我的/event
路由处理程序中:
app.post('/event', function(req, res) {
io.sockets.in(req.body.socketId).emit('someevent', req.body);
res.sendStatus(200);
});
这是因为默认情况下,每个套接字连接加入一个用其socket-id标识的房间,并且可以使用IO
对象iteself将消息发送到房间(不需要从IO.on('connection',socket=>{})
获取套接字对象