1

我目前正在开发一个 android 项目,我正在努力寻找在两部 android 手机之间建立通信的最佳方法。

一部安卓手机将停靠在移动平台上,例如遥控车。我希望这款手机能够接收从另一部安卓手机发送的简单控制信号(“前进”、“后退”、“左”、“右”、“gotoCoordinate”)。我还希望对接电话能够返回状态信号。

最好我希望通过 GPRS 进行通信。我知道有关 P2P 通信的困难,我目前正在研究“Android Cloud To Device Messaging”。(http://code.google.com/android/c2dm/index.html)

我想听听您对 Android C2DM 的体验(很高兴听到从传输到接收的延迟)以及您对在我的项目中使用它的想法。我很感激其他关于如何解决这个问题的建议。我希望使用这种方法必须处理相对较高的延迟,但当然最好是尽可能低的。

4

1 回答 1

1

C2DM 不保证消息的“交付或订购”,并且您可以发送的消息数量受到限制(上限,但仍然是限制)。它并不是真正用于控制遥控车等低延迟的东西。它更适合非实时事件。

http://code.google.com/android/c2dm/

对于使用 GPRS 的低延迟内容,您可以自行设置第三方服务器,并让两部手机通过它进行通信。我已经为几个使用直接 TCP 套接字的 Android 应用程序做到了这一点,它运行得相当好(如果你使用 UDP,它会更快/更好)。使用 GPRS 可能仍然有太多延迟,这取决于您的需要,但这是一个权衡(非常方便,几乎总是存在,其他方法则没有)。

做到这一点的理想方法是优雅地结合可用和回退,并测试连接后的延迟,以确保网络达到标准或退出。例如,如果可用,请使用本地 WiFi 网络。也就是说,让两个设备在启动时向第三方服务器“注册”,然后如果它们都在同一个 WiFi 上,则让它们直接通信(在一个或两个上运行服务器,在一个或两个上运行客户端,从注册中获取有关发现等的信息)。如果他们不在 WiFi 上,则回退到 GPRS,但当然会意识到会有更多的延迟。最后,一旦建立了任何方法,就发送一些测试消息来检查延迟。

我知道这不是一个真正的“答案”,它更多的是关于这个的意识流,但它不适合评论,我认为它可能会有所帮助;)。

(全面披露:我曾开发过连接多个移动设备和多台电视的 Android 应用程序,其中一些通过 GPRS,一些 Wifi,一些直接。我在一家为此类东西开发平台的公司 (MOVL) 工作,它更专注在 mobile-TV-mobile 上,但它也支持 mobile-mobile。总而言之,使用常规网络做自己并不太难,棘手的部分是降低延迟并为每个设备选择正确的方法。)

于 2011-11-07T15:23:44.430 回答