WebSockets 究竟是如何工作的?实现它们似乎很奇怪。
首先您用地址构造对象,然后定义回调,如onopen
,它在连接打开时被调用。现在,如果我在构建它时告诉 websocket 进行连接,那会怎样呢?如果构造函数以异步方式连接,是否可以保证调用我的onopen
。
总结一下:
1) 当我声明所有回调时,websocket 何时决定连接?
2) send()
方法是异步的吗?如果是这样,有没有办法将其称为同步?
编辑: 我发现 send()
是异步的,有一个 bufferedAmount
属性返回缓冲的数据量将被寄出。但是,第二个问题的第二部分仍然成立。
最佳答案
我找到了一个很好的方法来解释事件循环的这一部分是如何工作的:
In an event loop, everything runs asynchronously, except for your code.
连续语句将始终在下一次事件循环迭代发生之前执行。这意味着您可以安全地将事件监听器分配给 ws
对象,因为您知道它无法在当前迭代完成之前调用它们。
至于发送,正如您注意到的那样,这些值通常会被缓冲。但是,在触发 onopen
事件之前发送任何消息可能不是一个好主意,因为您正在缓冲尚未打开的连接上的消息。
我希望这能回答您的问题。
关于html - WebSockets 和它的异步/同步部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11942694/