Socket.io - 客户端未收到连接时发出的事件

Chr*_*odz 5 node.js socket.io angular ngx-socket-io

我在 Angular 应用程序的客户端上使用ngx-socket-io 。我已按照“如何使用”部分中的设置进行操作。

当一个客户端使用以下代码连接时,我尝试向所有连接的客户端发出一个事件:

const app = require('express')();
const http = require('http').Server(app);
const io = require('socket.io')(http);

io.on('connect', socket => {
  io.emit('foo', 'foo-event');
});
Run Code Online (Sandbox Code Playgroud)

但是,客户端在执行以下操作时永远不会收到此事件:

constructor(
  private socket: Socket
) {
  this.socket.fromEvent('foo')
    .subscribe((e) => {
      console.log(e);
    });
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我将服务器代码更改为:

io.on('connect', socket => {

  socket.on('foo', () => {
    io.emit('foo', 'foo-event');
  });
});
Run Code Online (Sandbox Code Playgroud)

以及客户端代码:

constructor(
  private socket: Socket
) {

  this.socket.emit('foo');

  this.socket.fromEvent('foo')
    .subscribe((e) => {
      console.log(e);
    });
}
Run Code Online (Sandbox Code Playgroud)

然后它就会按预期工作。

为什么我不能像第二个示例一样先发出一个事件并在客户端上接收它,而不先从客户端发出一个事件?

小智 0

根据这个答案,我认为你应该使用connection事件,因为connect在成功连接之前发出。因此您无法发出新事件。