Javascript websocket异步不休眠

标签 javascript asynchronous websocket

我有固件背景,主要用普通的 C 程序编写代码。

目前我需要一个 Web 浏览器通过专用 TCP 套接字连接到某些硬件并以自定义协议(protocol)格式交换数据。我们选择了 Websockets 路线,因为这项技术适用于新手机、PC 和平板电脑。

我的问题是 Javascript 没有真正的 Sleep() 函数。通常我们会做这样的事情:

  1. 发送消息。
  2. 在硬件处理消息时休眠。
  3. 获取响应并继续运行程序。

例如,我想将一些数据保存到硬件中。

  1. 按协议(protocol)发送数据。
  2. 获取确认硬件已保存数据的响应。
  3. 如果成功发送消息 A,否则发送一些消息 B。

问题是第 3 步无法完成,因为没有 sleep 。我已阅读有关 setTimeoutfunction() 的信息,但这并不能解决我的问题。让回调事件处理每个接收到的数据包并跳转到不同的函数似乎很麻烦。另外,如果我在一个 while 循环中有很多发送,这似乎不可能使用回调函数?

我知道我的方法可能是错误的,但有人可以向我解释如何调整我的推理来处理这种情况吗?

如有任何意见或建议,我们将不胜感激。

谢谢,

最佳答案

你不应该使用 sleep 来等待 Websocket 响应,即使在 javascript 中有一个。使用 sleep 会挂起您的整个站点以等待套接字响应。例如,挂起意味着没有来自用户的交互。

要处理无穷无尽的回调你需要先做一些设计,而不是到处乱扔。

执行此操作的规范方法是为(Web)套接字注册一个处理程序,当服务器向您发送消息时调用该处理程序。您的应用程序会在内部记住它的状态(阅读有关状态机的信息)并知道如何处理此消息,在当前的执行点上。

顺便说一句。如果您的流程只是按照您编写的方式询问服务器并等待响应,请考虑使用简单的 AJAX。 WebSocket 旨在允许服务器在它(服务器)决定时将消息推送给接收者,而不仅仅是回答明确的请求。 AJAX 专为这种用例而设计,您可以同步调用它,这样即使不休眠也能使您的程序线性化 ;)

关于Javascript websocket异步不休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12578596/

相关文章:

javascript - Algolia 按嵌套属性 JavaScript 过滤

javascript - 这可以简化为按顺序加载多个脚本吗

c# - 等待/异步奇怪的行为

java - WebSocket session 之间共享的所有成员是否应该同步?

google-app-engine - 有谁知道与 Google App Engine 兼容的 Go Lang websocket 客户端?

javascript - 如何从 JavaScript 调用 CSS

javascript - 模块和脚本有什么区别?

iphone - 异步回调已解除的 View Controller ?

python - 线程池是如何工作的,以及如何在像 NodeJS 这样的异步/等待环境中实现它?

java - Jetty 8.1.1 Websocket 客户端握手