我正在开发一个无市场应用程序,运行在20-30个Android设备(特定于具有android蜂窝/ ICS OS的平板电脑的目标)维持与本地WIFI网络的连接1-2小时的时间段,并且需要在它们之间交换数据(表示命令的简单对象)。
大多数情况下,一个特定的平板电脑的行为类似于发送命令的服务器,而其他设备如接收命令的客户端,但“客户端”也有时会向“服务器”发送命令。
作为这种通信需求的解决方案 - 我正在使用一段时间的开源 封装TCP客户端/服务器协议的库,名为-Kryonet。 我发现它很容易使用,并且基本上可以完成这项工作,虽然它有时“不稳定” - 会产生很多断开连接。 我无法承受这种断开,它会破坏整个流程和用例,导致客户端失去命令。
我正在做一些恢复逻辑,重新连接客户端并向他们发送他们错过的内容,但这对用例来说还不够好。
最近我听说过多播广播协议,甚至发现了一个开源库调用 - 最佳实现这个协议的JGroups,并且公开了简单易用的界面。仍然没有尝试过,但得到了一个知道的人的建议,说为了我的目的,TCP客户端/服务器应该更好。
TIA
答案 0 :(得分:3)
虽然JGroups承诺更好地解决您的情况,但您可能需要多尝试一下以确定断开连接的原因。由于您的客户端和服务器都是平板电脑,因此还有一些其他原因无关:
1)如果未在Service
中维护连接,则默认情况下它们将非常不可靠。 (请参阅this question关于在Android中销毁的单身人士)
2)如果套接字未设置为“keepalive”,则它们将在任意秒数后超时。
3)您使用的设备在进入睡眠状态时可能会关闭一些持久连接。
4)平板电脑可能正在退出WiFi范围,并切换到移动网络。
在多台桌面计算机上尝试代码的网络部分,以确定问题是否与Kryonet或您的代码有关,或者问题是否在Android上运行。