我试图了解以下各项的背景:
据我所知:
socket
变量表示当前正在与之通信的单个连接。
io
变量代表socket
变量的集合
到目前为止,我已经提出了以下建议。我还没弄明白第二和第五选择是什么。也许他们可能不存在。但是,我不确定第1和第3选项之间的区别是什么:
是否使用过第2和第5个选项?第1和第3选项有什么区别?
答案 0 :(得分:2)
我看到的记录是:
io.emit() - send to all connected clients
io.sockets.emit() - send to all clients in the "/" namespace
io.to(roomName).emit() - send to all clients in a particular room
io.in(roomName).emit() - .in() is the same as .to()
io.of(nsp).emit() - send to all clients in a particular namespace
io.of(nsp).to(room).emit() - send to clients in a namespace that are in a room
namespace.emit() - send to all clients in a particular namespace
socket.emit() - send to single client
socket.broadcast.emit() - send to all connected clients except socket
io.sockets
是默认的/
命名空间,因此它是io.of('/')
的特例。因此,io.sockets.emit()
只是在io.of('/').emit()
中发送到命名空间。
如果您的客户端没有连接到任何自定义命名空间,那么您的所有客户端连接都将位于/
命名空间中,因此io.emit()
和io.sockets.emit()
将最终执行相同的操作。但是,如果您有任何客户端连接到自定义命名空间,则io.sockets.emit()
将仅发送到/
命名空间中的套接字,而io.emit()
将发送到所有连接的客户端,而不管命名空间。< / p>
我不知道sockets
变量或io.socket
属性。如果它们确实存在,则它们似乎没有记录,我不建议使用它们。
是否使用过第2和第3个选项?
我不知道对io.socket.emit()
的支持。 io.sockets.emit()
广播到连接到默认命名空间的所有客户端,当使用其他命名空间时,它会有用。
第1和第3选项有什么区别?
正如我上面所解释的,当有任何客户端连接到自定义命名空间时,io.emit()
和io.sockets.emit()
之间存在差异。
答案 1 :(得分:-2)
阅读Documentation以及this question的答案。它拥有您需要的一切。