2

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

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

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

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

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

  1. 在协议中发送数据。
  2. 得到确认硬件保存数据的响应。
  3. 如果成功发送消息A,否则发送一些消息B。

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

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

任何意见或建议将不胜感激。

谢谢,

4

1 回答 1

0

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

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

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

顺便提一句。如果您的流程只是您写的询问服务器并等待响应,请考虑使用简单的 AJAX。WebSocket 旨在允许服务器在它(服务器)决定时将消息推送到接收器,而不仅仅是响应显式请求。AJAX 是为这个用例设计的,您可以同步调用它,这样即使没有睡眠也可以使您的程序线性化;)

于 2012-09-25T09:10:54.733 回答