我正在开展一个简单的项目,我需要通过互联网通过Android
手机Gyroscope Sensor
控制Arduino机器人(2个伺服电机)。
正如您可以想象的那样,即使在3D空间中手机的方向变化很小,3轴陀螺仪坐标也会非常灵敏地变化,因此我希望将滞后最小化为毫秒。
现在除了硬件之外,我的第一个里程碑是通过互联网尽可能快地和连续地将Android的陀螺仪坐标发送到计算机(如实时数字数据流)。我知道传统的HTTP based Client-Server
机制会非常慢,因此我已经了解了以下内容:
- Google的Chanel API
- 的WebRTC
- 的WebSockets
醇>
根据我的研究,Channel API显示从10ms到偶数秒的延迟。此外,GAE将请求限制为30秒。这是一个Channels API压力测试: http://channelapistresstest.appspot.com/ 尝试点击"发送5" - 按钮,你会看到延迟时间可达数秒。
现在,WebRTC听起来比WebSockets更有前途和更快。如果有人可以指导我在Native JAVA和Native Android中实际实现WebRTC,我将非常感激(任何优秀的图书馆?我想发送coords。来自Android和通过JAVA接收 - 桌面上的SE客户端)。我对Hybrid App解决方案(如Crosswalk
)不感兴趣。我还想了解如何设置信令服务器。总结一下,我有以下问题:
- 我应该使用哪种方法? (通道API,WebSockets,WebRTC或其他东西)具有本机Java和Android支持?
- 如果是WebRTC,我该如何设置信令服务器? (只是简要说明)或WebSocket的WebSocket服务器?
- 我可以使用Google的云平台或类似的东西来减少我的复杂性吗?
- 任何整体建议?
醇>
提前致谢。
答案 0 :(得分:3)
您不想使用WebRTC。 WebRTC要求你设置一个单独的信令通道,比如WebSockets,所以它对于你想要做的事情来说是不必要的复杂和非常重量级的。
如果您的要求只是将一系列陀螺仪值从设备传送到另一个设备,我建议:
A simple server to print socket input to standard output is just a few lines of Python。这确实需要您学习使用套接字,因为您的客户端需要以相同的方式解释字节流。您也可以使用WebSockets,但这可能会显着增加服务器的复杂性;例如,Java EE比Java SE复杂得多。
如果你想要数据完整性(我想你这样做),你应该使用TCP。
如果您真的担心延迟,您还应该跳过上网。在LAN上运行所有内容。我想你无论如何都必须看到设备受到控制,因此没有必要去上网。
答案 1 :(得分:2)
我会忽略WebRTC这个项目。设置起来比较复杂,需要特殊的服务器
WebSocket应该适合这个项目。它与TCP一样快。
如果你想不惜一切代价避免这种延迟,但丢包不是问题,那么我会选择简单的UDP。对于所有这些,您不需要任何库,只需几行代码。