我正在做一个简单的项目,在这个项目中,我需要通过Android
手机的Gyroscope Sensor
,通过互联网控制Arduino机器人(两个伺服电机)。正如你所看到的,即使手机在3D空间中的方向变化很小,3轴陀螺仪坐标也会非常敏感地变化,所以我想把滞后时间减少到毫秒。
现在除了硬件,我的第一个里程碑是通过互联网尽可能快速、连续地将陀螺仪坐标从Android发送到计算机(就像数字数据的实时流)。我知道传统的HTTP based Client-Server
机制会很慢,所以我研究了以下内容:
- 谷歌的香奈儿API
- WebRTC
- WebSockets
根据我的研究,API频道显示的延迟从10ms到几秒钟。GAE还将请求限制为30秒。以下是Channels API压力测试:http://channelapistresstest.appspot.com/试着多次点击"发送5"按钮,你会看到延迟数上升到几秒钟。
现在,WebRTC听起来比WebSockets更有前景,速度也更快。如果有人能指导我在原生JAVA和原生Android中实际实现WebRTC,我将不胜感激(有什么好的库吗?我想从Android发送coords.并通过桌面上的JAVA-SE客户端接收)。我对混合应用程序解决方案(如Crosswalk
)不感兴趣。我也想知道我应该如何设置一个信号服务器。总结起来,我有以下问题:
- 我应该使用哪种方法?(渠道API,WebSockets,WebRTC或其他什么)与本地Java和android支持
- 如果是WebRTC,我应该如何设置信号服务器?(只是简单描述)还是WebSocket的WebSocket服务器
- 我可以使用谷歌的云平台或类似的东西来降低我端的复杂性吗
- 有什么总体建议吗
提前谢谢。
您不想使用WebRTC。WebRTC要求您无论如何都要像WebSockets一样设置一个单独的信号通道,因此它对于您要做的事情来说是不必要的复杂和非常沉重的
如果您的要求只是将一系列陀螺仪值从一个设备通信到另一个设备,我建议:
- 从一个简单的套接字服务器开始
- 通过套接字将客户端连接到此服务器
- 将消息从一个客户端中继到另一个客户端
例如,将套接字输入打印到标准输出的简单服务器只需几行Python即可。这确实需要您学习使用套接字,因为您的客户端需要以相同的方式解释字节流。您也可以使用WebSockets,但这可能会显著增加服务器的复杂性;例如,Java EE要比Java SE复杂得多。
如果你想要数据完整性(我想你是这样做的),你应该使用TCP。
如果你真的担心延迟,你也应该跳过上网。在局域网上运行所有内容。我想你无论如何都必须看到设备处于受控状态,所以上网没有意义。
我会忽略这个项目的WebRTC。它的设置更加复杂,并且需要一个特殊的服务器
WebSocket应该适合这个项目。它和TCP一样快
如果你想不惜一切代价避免这种延迟,但数据包丢失不是问题,那么我会选择简单的UDP。对于所有这些,您不需要任何库,只需要几行代码。