我正在开发一个esp8266库,用于使用支持网络的设备(主要是手机)来控制机器人。用户连接到运行在esp上的服务器,库使用WebSockets发送有关按钮、操纵杆和/或其他任何内容的更新。
问题是数据开始延迟,有时消息接收得很晚,因为它使用TCP(如果这些消息没有被发送,它会工作得更好)。此外,由于esp内存不足,这可能导致它崩溃。
我如何优化它以尽可能快地更新而不接收旧消息?
像WebRTC这样的东西会更好吗?或者还有其他更适合这个目的的东西吗?使用UDP的WebSockets似乎是一个更好的选择,但显然浏览器不能发送UDP?
什么样的东西应该考虑/使用?
顺便说一句,如果有帮助,这里有一个链接到我的library。
谢谢你的帮助
2条答案
按热度按时间iswrvxsc1#
您需要找到邮件延迟的原因。网络不稳定,或者你发送了太多的小消息,或者你没有正确使用arduinoWebSockets库?
1.您需要将消息打包到单个有效负载中,直到有效负载达到MTU大小,或者经过x毫秒,您必须发送数据。与发送10条每条100字节的小消息相反,将它们累积成一个1000字节的有效负载并立即发送。您应该会看到吞吐量的显著提高。
如果以上所有都没有帮助,那么Web浏览器就不是您的选择,您将需要为移动设备创建应用程序,这些应用程序将原始UDP通信到您的服务器。浏览器不能做UDP,除了WebRTC,但在你的情况下,你不能使用WebRTC,因为它根本不会在你的低内存上运行。WebRTC是一个资源Pig;不适用于DSP。
jhkqcmku2#
我建议使用MQTT作为您的通信协议,尝试在云上使用HiveMQ,它非常简单和直接。MQTT是一个概念,您的客户端连接到代理并发布或订阅写/读消息。