WebSockets和它的异步/同步部分

3
WebSockets是如何工作的?实现它们似乎很奇怪。
首先,你需要构造对象并定义回调函数,例如当连接打开时会调用onopen。但是如果我在构造WebSocket对象时告诉它连接到某个地址,那么它什么时候开始连接呢?如果构造函数以异步方式连接,那么我可以保证我的onopen回调函数一定会被调用吗?
总结一下:
1)WebSocket在什么时候决定连接?是在声明所有回调函数时吗?
2)send()方法是否是异步的?如果是,有没有办法使它同步执行?
编辑:我已经发现send()是异步的,有一个bufferedAmount属性返回缓存待发送数据的数量。然而,第二个问题的后半部分仍然存在。
1个回答

3
我发现解释事件循环的一种好方法是这样的:
在事件循环中,除了你的代码,所有内容都是异步运行的。连续的语句将在下一个事件循环迭代之前执行。这意味着您可以安全地为ws对象分配事件侦听器,因为您知道它不能在当前迭代完成之前调用它们。
至于发送消息,则通常会将这些值缓冲。但是,在触发onopen事件之前发送任何消息可能不是一个好主意,因为您正在在尚未打开连接的情况下缓冲消息。
我希望这回答了你的问题。

这基本上澄清了一切。我看到WS代码链应该以绑定到onopen的函数开始。 - Etherealone
是的,那正是我想表达的意思。 :) - igorw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接