socket.io 捕获 nodejs 中的任何事件

socket.io catch any event in nodejs

我的 reactjs 应用程序创建了到 nodejs 的 socket.io 连接。使用 socket.io 4.1.2,我可以在服务器端的 connection 事件中看到它,如下所示;

const io = new Server(server);

io.on("connection", async (socket: Socket) => {
  console.log("CONNECTION...", socket.id);
  socket.onAny((event, ...args) => {
    console.log(`ANY ${event}`, socket.id);
  });
});

AFAIK,我们可以在服务器端捕获任何事件。但是,socket.onAny 在连接后永远不会被任何事件击中。例如,当我关闭浏览器时,我在服务器端看到了以下几行。但是any没有捕捉到这个断开事件。

  socket.io:client client close with reason transport error +6m
  socket.io:socket closing socket - reason transport error +6m
  socket.io:client client close with reason transport close +1s
  socket.io:socket closing socket - reason transport close +1s

如何捕捉服务器端的所有事件?

我知道文档中没有说明,但我认为 onAny 侦听器只计算从客户端套接字“手动”发出的事件。喜欢:

// client
socket.emit("some-event");

// server
socket.onAny((event) => {
  console.log(`ANY $[event}`);
});

// will log "ANY some-event"

但是,对于 disconnect 事件,您需要一个额外的侦听器,例如:

// server
socket.on("disconnect", (reason) => {
 // ...
});

尝试从您的客户端发出一些事件并检查您的 onAny 侦听器是否被触发。应该!