WebSockets、WebRTC和UDP:如何与esp8266实时通信

3
我正在开发一个基于esp8266的库,用于使用网络设备(主要是手机)控制机器人。用户连接到运行在esp上的服务器,该库使用WebSockets发送有关按钮、摇杆和/或其他内容的更新。
问题在于,数据开始延迟,并且有时会非常晚地接收消息,因为它使用TCP(如果这些消息不被传递,它将工作得更好)。此外,由于esp具有低内存,这可能导致其崩溃。
如何优化以尽可能快地更新而不接收旧消息?
类似WebRTC的东西是否更好,还是有其他更适合此目的的东西?使用UDP的WebSockets似乎是更好的选择,但显然浏览器无法发送UDP?
我应该查看/使用哪些内容?
顺便说一句,如果有帮助,这里是我的library链接。
感谢任何帮助。
3个回答

3
你需要找出消息延迟的原因。是网络不稳定,还是你发送了过多的小消息,或者是你没有正确使用arduinoWebSockets库?
  1. arduinoWebSockets库提供一些异步行为,请确保你没有误用它。
  2. 你需要将消息打包成单个负载,直到负载达到MTU大小,或者经过x毫秒你必须发送数据。相比于发送10个每个100字节的微小消息,将它们累积成一个1000字节的负载并一次性发送。这样可以看到很大的吞吐量提升。

如果以上所有方法都无法帮助你,那么web浏览器对你来说不是一个选项,你需要为移动设备创建应用程序,该应用程序将与您的服务器通信原始UDP。 除了WebRTC之外,浏览器不能做UDP,但在你的情况下你不能使用WebRTC,因为它根本无法在内存低的esp上运行。WebRTC是资源猪;对DSP并不适用。


0
我建议您使用MQTT作为通信协议,尝试在云上使用HiveMQ,它非常简单和直观。MQTT是一个概念,其中您的客户端连接到代理并发布或订阅以写入/读取消息。

0
MQTT是一种非常好的协议选项,当寻找快速、轻量级的消息传递时。作为HiveMQ团队的成员,我可能有偏见,但HiveMQ的云服务是一个很好的免费演示,展示了使用MQTT可以实现什么。
MQTT还提供了可以指定的服务质量级别,以确保消息传递遵循您期望的模式 - 例如,如果某个消息只需要被传递一次,那就是一个选项。
如果您对使用MQTT感兴趣,甚至还有一个专门针对ESP8266设备的入门指南可供参考。

https://www.hivemq.com/mqtt-cloud-broker/

最好的,
HiveMQ团队的Aaron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接