推送与投票
您提议的频繁发送 AJAX 请求的解决方案听起来很像轮询- 您每隔一段时间发送一个请求以检查状态是否已更改。当压电传感器检测到更改时,将更改推送到服务器会更有意义。
这是这之间的区别:
服务员:门口有人吗?
传感器:没有。
服务员:门口有人吗?
传感器:没有。
服务员:门口有人吗?
传感器:没有。
……无休止地重复……
还有这个:
传感器:门口有人!
第一个例子是轮询,第二个例子是推送。您可以判断哪一个将具有更低的功耗、更少的复杂代码和更少的网络使用。
HTTP 还是其他什么?
AJAX 请求是通过 HTTP 发送的,因此它非常重要,并且每个连接需要多次TCP 握手 (除非您使用Keep-Alive)。
可能值得考虑替代协议,例如MQTT(问题“何时以及为什么使用 MQTT 协议? ”中有一些很好的解释,该问题与您的问题非常相似)。
在当前情况下,像 MQTT 这样的消息代理可能比您真正需要的更强大一点,但是如果您选择向智能家居网络添加更多设备,则可以轻松扩展一个 MQTT 代理,而您当前的 AJAX 请求系统将很快分崩离析。想象一下四五个不同的设备相互轮询;它会很快导致您的网络过载,并且会大量消耗电力。
节点和网络套接字
使用 web sockets 和 Node 可以解决使用push而不是poll 的问题,所以在我看来这将是一个好主意。但是,我怀疑如果您真的不想学习 Node.js,轮询会起作用。
如果您想要一个可在您扩展智能家居时使用的可扩展解决方案,那么一定要推动——它会省去很多麻烦和眼泪。如果您只想快速验证概念,轮询可能会奏效。
我个人的建议是,您应该学习 Web 套接字或使用 MQTT 之类的消息代理进行调查。您可以使用像Mosquitto-PHP(带有HiveMQ的指南)这样的客户端库来简化在 PHP 中使用 MQTT,或者只使用 Node 和 Web 套接字。我怀疑 Node 和 web sockets 的学习资源会更好,但 MQTT 往往更受智能家居/物联网环境的青睐。