我有固件背景,主要用普通的 C 程序编写代码。
目前我需要一个 Web 浏览器通过专用 TCP 套接字连接到某些硬件并以自定义协议(protocol)格式交换数据。我们选择了 Websockets 路线,因为这项技术适用于新手机、PC 和平板电脑。
我的问题是 Javascript 没有真正的 Sleep() 函数。通常我们会做这样的事情:
- 发送消息。
- 在硬件处理消息时休眠。
- 获取响应并继续运行程序。
例如,我想将一些数据保存到硬件中。
- 按协议(protocol)发送数据。
- 获取确认硬件已保存数据的响应。
- 如果成功发送消息 A,否则发送一些消息 B。
问题是第 3 步无法完成,因为没有 sleep 。我已阅读有关 setTimeoutfunction() 的信息,但这并不能解决我的问题。让回调事件处理每个接收到的数据包并跳转到不同的函数似乎很麻烦。另外,如果我在一个 while 循环中有很多发送,这似乎不可能使用回调函数?
我知道我的方法可能是错误的,但有人可以向我解释如何调整我的推理来处理这种情况吗?
如有任何意见或建议,我们将不胜感激。
谢谢,
最佳答案
你不应该使用 sleep 来等待 Websocket 响应,即使在 javascript 中有一个。使用 sleep 会挂起您的整个站点以等待套接字响应。例如,挂起意味着没有来自用户的交互。
要处理无穷无尽的回调你需要先做一些设计,而不是到处乱扔。
执行此操作的规范方法是为(Web)套接字注册一个处理程序,当服务器向您发送消息时调用该处理程序。您的应用程序会在内部记住它的状态(阅读有关状态机的信息)并知道如何处理此消息,在当前的执行点上。
顺便说一句。如果您的流程只是按照您编写的方式询问服务器并等待响应,请考虑使用简单的 AJAX。 WebSocket 旨在允许服务器在它(服务器)决定时将消息推送给接收者,而不仅仅是回答明确的请求。 AJAX 专为这种用例而设计,您可以同步调用它,这样即使不休眠也能使您的程序线性化 ;)
关于Javascript websocket异步不休眠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12578596/