WebSockets如何正常工作?实施它们似乎很奇怪。
首先使用地址构造对象,然后定义在打开连接时调用的onopen
之类的回调。现在,如果我在构建它时告诉websocket连接,会发生什么?如果构造函数以异步方式连接,是否可以保证调用onopen
。
总结一下:
1)当我宣布所有回调时,websocket何时决定连接?
2)send()
方法是异步的吗?如果是这样,有没有办法将其称为同步?
编辑:我发现send()
是异步的,有一个bufferedAmount
属性可以返回缓冲要发送的数据量。但是,第二个问题的第二部分仍然存在。
答案 0 :(得分:2)
我找到了一个很好的方法来解释事件循环的这一部分是如何工作的:
在事件循环中,除代码外,所有内容都以异步方式运行。
在下一个事件循环迭代发生之前,将始终执行连续语句。这意味着您可以安全地将事件侦听器分配给ws
对象,因为您知道在当前迭代完成之前它无法调用它们。
至于发送,正如您所注意到的那样,这些值通常是缓冲的。但是,在onopen
事件被触发之前发送任何消息可能是个坏主意,因为您在尚未打开的连接上缓冲消息。
我希望这能回答你的问题。