有一部分Websockets API我不明白。如何在连接onopen处理程序之前确保WebSocket未打开?
onOpen
事件处理程序通常用于开始向服务器发送消息,因为在套接字打开并准备就绪之前我们无法做到这一点。
根据任何代码示例我可以找到(documentation),这是登记在网页套接字的onOpen
事件处理程序的常见方法:
1: const socket = new WebSocket('ws://localhost:8080');
2:
3: socket.addEventListener('open', function (event) {
4: socket.send('Hello Server!');
5: });
但是网页套接字contstructor呼叫(第1行)创建的WebSocket and attempts to open a connection to the server ,而事件处理程序稍后会附加(第3行)。
因此:在连接建立(非常)快的情况下,当我们到达第3行时socket
已经打开?
在这种情况下,我们将错过open
事件,因为事件处理程序在发生时没有注册。
我们如何保证收到open
事件?
因此,即使我在上面的脚本的第6行添加了非常耗时的操作,我的事件处理程序也不会错过? –
没错。另外,由于主线程事件循环将被阻止,并且您不会收到任何事件,因此您的网页可能会在长时间运行的操作期间滞后。 – berserkk
有趣,而且很有意义。谢谢! –