【发布时间】:2019-05-07 13:08:56
【问题描述】:
我还是 Javascript 的新手,我正在尝试使用 WebSockets。我有一个应用程序的工作框架,但它仍然有我需要解决的问题。
如何向应用程序的其余部分发出 Web 套接字已准备好使用的信号?
socket = new WebSocket( 'wss://' + window.location.host + '/ws/manager/' );
while (socket.readyState != 1){
// wait loop
}
创建套接字后,它会立即返回,但尚未准备好进行通信。我的第一个想法是我只是在检查状态时循环,这是我当前的解决方案,但这只会烧毁 CPU 并使应用程序无响应。引入延迟可以解决一些响应问题,但这有其自身的问题,如下所示:What is the JavaScript version of sleep()? 例如。我也明白循环等待是不行的。
我看到的另一个解决方案是使用setTimeout() 和回调来继续执行,但我觉得这会对代码读写造成很大的干扰,并且可能仍然无法以更好的方式完全解决问题。
这将是一个单页应用程序,由于 ajax 或传统 HTTP 需要大量连接,服务器通信将几乎完全使用 Web 套接字完成。一般来说,我并不介意应用程序会变得无响应,因为如果没有 Web 套接字,它无论如何都将毫无用处。
【问题讨论】:
-
使函数异步并将等待添加到套接字? javascript.info/async-await
-
这就是我遇到麻烦的地方。如果我使函数异步并使用等待,那么只会将问题移到下一个级别,不是吗?调用async函数重新连接会立即返回,我仍然不知道socket什么时候连接。
-
@Dementic,感谢您指出这一点。我想我把自己弄进了一个深洞。该问题和答案提供了我正在寻找的反馈。
-
javascript(在浏览器中)通常是单线程业务。所以“等待”没有多大意义(等待什么?)。很难从您的问题中判断是否有任何东西在后台运行。如果没有,我不确定您要实现什么(在套接字准备好之前,套接字上的侦听器无论如何都不会工作)。
-
@LongChalk 我正在尝试解决应用程序刚刚启动(没有运行)并且应用程序遇到断开连接(东西正在运行)的情况,因此这两种情况都需要解决方案。 “等待”是直到应用程序实际上可以通过 WebSocket 做一些有用的事情
标签: javascript