我正在开发一个非市场应用程序,它在20-30个Android设备上运行(针对具有Android Honeycomb / ICS操作系统的平板电脑),在本地WIFI网络上保持连接1-2小时,并且需要在这些设备之间交换数据(表示命令的简单对象)。
大部分时间,一个特定的平板电脑像一个服务器一样发送指令,其他设备像客户端一样接收指令,但“客户端”有时也会向“服务器”发送指令。
为了解决这种通信需求 - 我使用了一个称为Kryonet的封装TCP客户端/服务器协议的开源库。我发现使用起来非常容易,并且基本上可以胜任工作,但有时会不稳定 - 经常出现断开连接。我无法承受这种断开连接,因为它破坏了整个流程和用例,导致客户端丢失命令。
我正在实施一些恢复逻辑,重新连接客户端并发送它们错过的内容,但对于这种用例来说还不够好。
最近,我听说了多播广播协议,并找到了一个名为JGroups的开源库,它优化了此协议,并公开了易于使用的接口。虽然我还没有尝试过它,但从了解它的人那里得到了建议,说它应该比TCP客户端/服务器更好地适用于我的目的。
问题:我应该使用什么最佳方法来实现我描述的行为?(不一定是我建议的两种方法之一)
谢谢。
大部分时间,一个特定的平板电脑像一个服务器一样发送指令,其他设备像客户端一样接收指令,但“客户端”有时也会向“服务器”发送指令。
为了解决这种通信需求 - 我使用了一个称为Kryonet的封装TCP客户端/服务器协议的开源库。我发现使用起来非常容易,并且基本上可以胜任工作,但有时会不稳定 - 经常出现断开连接。我无法承受这种断开连接,因为它破坏了整个流程和用例,导致客户端丢失命令。
我正在实施一些恢复逻辑,重新连接客户端并发送它们错过的内容,但对于这种用例来说还不够好。
最近,我听说了多播广播协议,并找到了一个名为JGroups的开源库,它优化了此协议,并公开了易于使用的接口。虽然我还没有尝试过它,但从了解它的人那里得到了建议,说它应该比TCP客户端/服务器更好地适用于我的目的。
问题:我应该使用什么最佳方法来实现我描述的行为?(不一定是我建议的两种方法之一)
谢谢。
Service
类(以及清单中的相关条目,以及使用Intent
实际启动服务)比Activity
(UI交互的最高单元)具有更持久的优先级。如果您的应用程序仅包含Activity
,则在没有UI可显示时,它可能会被终止或暂停。即使您的应用程序不在前台,服务也可以保持进程活动状态。 - GreysonConnection
类似乎有一个setKeepAliveTCP
方法)。如果您还没有开始使用Android服务,那么这似乎可能不是个问题,或者至少是另一天的问题。 - Greyson