【问题标题】:How to listen to events in real time with Socket.io如何使用 Socket.io 实时监听事件
【发布时间】:2019-08-24 08:57:46
【问题描述】:

我试图实时监听 socket.io 事件,我在 Node 中有一个后端,正在发出它,还有一个前端服务在监听它,但它只在我重新加载页面后显示在视图中。

我的应用程序将在几秒钟内发送很多事件(每个事件都是一个 Post 请求),在我发送一个 post 请求后,我的后端 console.log 是即时的(这是我想要的),但正如我所说,我的前端不是。

节点:

const event = req.body;

app.post('/webhook', (req, res) => {
  io.sockets.on('connection', function (socket) {
    socket.emit('event', require('util').inspect(event));
  });

  res.json({
    status: 'ok'
  });
});

服务:

observable:Observable<string>;
  socket;

  constructor() {
    this.socket = io("http://localhost:8080");
  }

  getData(event: String) : Subject<any> {
    let subj = new Subject;
    this.socket.on(event, data => subj.next(data)); 

    return subj;
  }

组件:

constructor(private _eventsService : EventsService) {
    this._eventsService.getData('event').subscribe(data => {
      console.log(data); // Only logs after reload
    });
  }

基本上我想在前端继续监听事件,当我向 /webhook 发送 Post 请求时,将发出该事件,并且我的视图更新(或日志等)。

【问题讨论】:

标签: javascript node.js angular socket.io rxjs


【解决方案1】:

我认为事件定义在错误的范围内,并且每次有帖子时都不应该调用 io.sockets.on('connection'。

如果您每次都尝试向所有连接的客户端广播 然后我会摆脱 io.sockets.on('connection' 并使用:

const inspect = require('util').inspect;
app.post('/webhook', (req, res) => {
  io.emit('event', inspect(req.body));

  res.json({
    status: 'ok'
  });
});

如果您只想向发布它的客户端发送和事件,那么您需要在有效负载中包含 socket.id 并使用它来将消息发送回客户端。 假设 req.body 是一个对象,类似于:

const inspect = require('util').inspect;
app.post('/webhook', (req, res) => {
  if (req.body.socketId){
    io.to(req.body.socketId).emit('event', inspect(req.body));
  }
  res.json({
    status: 'ok'
  });
});

【讨论】:

  • “我认为事件定义在错误范围内”是什么意思?你对帖子内部的连接是正确的,但是由于某种原因,当我删除它时,它说 io.emit() 不是一个函数,也许是我的导入?我在 app.js 中导入 socket.io。我的快递服务器在哪里,然后在应用程序中,我正在做 module.exports = io,并在发布之前的路由文件中要求
  • const 事件 = req.body; // {
  • const SocketIO = require('socket.io'); const io = socketIO(服务器, {}); //
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 2013-11-29
  • 2017-12-07
相关资源
最近更新 更多