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的评论是正确的,但它并没有帮助我解决我的问题。

我最终做的是:

  1. 在来自客户端的发送请求/event ,我添加了一个隐藏的input字段,其中包含套接字连接的ID。
  2. 然后在我的/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 =>{})