了解 emit 方法的各种上下文
Posted
技术标签:
【中文标题】了解 emit 方法的各种上下文【英文标题】:Understanding the various contexts of the emit method 【发布时间】:2018-03-21 09:01:30 【问题描述】:我正在尝试了解以下各项的上下文:
io.emit io.socket.emit io.sockets.emit socket.emit sockets.emit socket.broadcast.emit据我了解:
socket
变量表示当前正在与之通信的单个连接。
io
变量代表socket
变量的集合
到目前为止,我想出了以下内容。我还没有弄清楚第二个和第五个选项的用途。所以也许他们不存在。但是,我不确定第一个和第三个选项之间有什么区别:
io.emit - 向所有客户端发送消息 io.socket.emit io.sockets.emit - 向所有客户端发送消息 socket.emit - 向单个客户端发送消息 sockets.emit socket.broadcast.emit - 发送给除发送者之外的所有客户端是否曾经使用过第二个和第五个选项?第一个选项和第三个选项有什么区别?
【问题讨论】:
Send response to all clients except sender的可能重复 这不是 Retro Gamer 声称的副本的副本。我已经向 Retro Gamer 提到我的问题部分基于此页面。他似乎被我冒犯了,表示他的答案不是一个好的答案,然后继续发布他的链接作为我的问题的副本,这显然不是。 请查看this question 的答案(第一和第二)。如果你做一个简单的 Ctrl-find,你会找到io.emit
、io.sockets.emit
、socket.emit
、sockets.emit
、socket.broadcast.emit
的答案。唯一似乎没有描述的是io.socket.emit
。很明显,您的答案(大部分)在上面/下面的链接中。请理解,我没有被冒犯,但我试图避免复杂的问题,因为 Stack Overflow 中已经有太多的问题了。
【参考方案1】:
我看到的记录在案的是:
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()
将发送到所有连接的客户端,而不管命名空间如何。
我不知道 sockets
变量或 io.socket
属性。如果它们确实存在,它们似乎没有记录在案,我不建议使用它们。
是否曾经使用过第二个和第三个选项?
我不知道对 io.socket.emit()
的支持。 io.sockets.emit()
向所有连接到默认命名空间的客户端广播,当使用其他命名空间时,该命名空间确实有用。
第一个选项和第三个选项有什么区别?
如上所述,当有任何客户端连接到自定义命名空间时,io.emit()
和 io.sockets.emit()
之间存在差异。
【讨论】:
谢谢。另外,我的第一个问题应该是“第二和第五”选项,而不是“第二和第三选项”。 @kojow7 - 好吧,我不知道任何名为sockets
的变量(在您的第 5 个选项中)所以我不认为 sockets.emit()
有效。你是从哪里得到这个概念的?
在搜索各种形式的发射时,我遇到了对“sockets.emit()”的不同引用。但是,似乎发布它们的人可能犯了一个错误。一个例子在这里:groups.google.com/forum/#!topic/socket_io/bjckmgTOQeE
@kojow7 - 我认为他们只是指io.sockets.emit()
,而不是sockets.emit()
。没有名为sockets
的全局变量。有人只是将sockets
称为io.sockets
的快捷方式。
谢谢。是的,你可能是对的。我最初编制了一份我发现的不同实例的列表。还有一些地方谈论 io.socket.emit,例如 medium.com/@abc810221/… - 但也许那只是不正确的代码。【参考方案2】:
阅读Documentation 以及this question 的答案。它有你需要的一切。
【讨论】:
您的回答没有帮助。事实上,这是我从中获得一些信息的地方。此外,并非我询问的所有内容都列在那里。例如:io.sockets.emit
未在此处列出。
@kojow7 那么看看这个问题:***.com/questions/10342681/…a 通过简单的谷歌搜索发现。你为什么不直接谷歌你有问题的每一个发射?
或者这个:***.com/questions/10058226/…以上是关于了解 emit 方法的各种上下文的主要内容,如果未能解决你的问题,请参考以下文章