物联网设计与嵌入式代码编写技术
1. 物联网设计中的实时反应
在物联网设计中,从不同视角看待产品十分重要。比如在准备模型时添加“搜索特定计时器”输入,从用户视角看这很明显,但在准备 API 时却未想到。传统 API 通过 HTTP 请求服务器并接收响应,不过对于响应性要求高的系统,这种方法存在弊端。建立 HTTP 请求需多次往返服务器,有 TCP“三步握手”过程,虽有时近乎瞬间完成,但也可能耗时明显。
对于强大的开发板,可在后台运行连接并在完成时响应;而像 Arduino 这类基础开发板,当前的以太网/HTTP 屏蔽层和库在连接时会阻塞,期间微控制器难以进行其他处理,虽可通过硬件中断解决,但存在限制和复杂性。若想在设备有动作时立即执行操作,需考虑连接时间,例如任务计时器可能会使记录的开始时间包含连接时间。
为实现即时响应,有两种选择:轮询和 Comet 技术,此外还有非 HTTP 协议如 MQTT、XMPP 和 CoAP 提供替代方案。
1.1 轮询
若要设备或客户端立即响应,由于不知事件何时发生,无法让请求与数据可用时间同步。例如,用户进入办公室时 WhereDial 应转向“工作”;任务计时器启动时,用户计算机客户端应响应并提供输入任务描述的机会。
传统做法是使用 HTTP API 请求定期发送请求,即轮询。如每分钟调用一次检查是否有新数据,但这意味着需等轮询返回才能响应,可能有一分钟延迟加上建立 HTTP 连接的时间。加快轮询频率(如每 10 秒一次)虽可减少延迟,但会给服务器和客户端带来负载。服务器方面,若设备增多,众多设备定期轮询会增加负载;客户端方面,像 Arduino 微控制器在连接时会阻塞。