Socket.Io 如何从包括发送者在内的套接字实例向房间中的所有成员发送

Socket.Io how to emit to all members in a room from a socket instance including the sender

如何从套接字实例向房间的所有成员发送信号?

我知道我可以 io.in('room').emit('event', data); 如果我可以访问 IO 实例,但在我的例子中我只能访问发送者的套接字,我将用户的套接字存储在用户对象中,并将它传递到我的代码中,以便我可以从任何地方发出,但结果我无法访问 IO 实例。

如何从发送者的套接字实例向房间的所有成员发送消息,包括发送者?

嗯,最好让自己以某种方式访问​​ io 实例,这样您就可以 io.in(room).emit(...)。您可以从创建它的地方导出它,然后将它导入您所在的位置,也可以通过其他方式使其可用。

这里有四种其他方法:

.io属性连接到每个插座

在创建 io 实例的文件中,您可以将其作为 属性 附加到每个套接字。

// put io on each socket
io.on('connection', socket => {
    socket.io = io;
});

然后,在任何套接字上,你可以用 socket.io.

得到 io

io 实例放入您的 app 对象中

如果 app 可用,那么有些人会使用 app.set("io", io);io 实例放在 app 对象上,这样其他地方的代码就可以使用 io.get("io");.


同时发送到房间和自己

作为变通方法,您也可以同时发送到:

socket.broadcast(room).emit(...);
socket.emit(...);

使用无证socket.server

socket 上还有一个未记录的 属性,它使您可以访问服务器对象。使用风险自负:

socket.server.in("room").emit(...);

这实际上为您提供了 io 实例。