socket.io无法发出快速app.postcallback
我有一个快速的应用程序,打开与我的前端React应用程序的套接字连接。
我想发送一个事件到连接的套接字,每当有人用json数据发送一个post请求到我的服务器,但是socket.emit不会在a.postcallback中触发。 然而,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); } }
SLaks的评论是正确的,但它并没有帮助我解决我的问题。
我最终做的是:
- 在来自客户端的发送请求
/event
,我添加了一个隐藏的input字段,其中包含套接字连接的ID。 -
然后在我的
/event
路由处理程序中,我做了:app.post('/event', function(req, res) { io.sockets.in(req.body.socketId).emit('someevent', req.body); res.sendStatus(200); });
这是可行的,因为默认情况下,每个套接字连接join一个用它的套接字id标识的房间,并且可以使用io
对象iteself将消息发送到房间(不需要从io.on('connection', socket =>{})
获得套接字对象io.on('connection', socket =>{})