3

我正在开发一个非市场应用程序,它在 20-30 个 android 设备上运行(目标特定于具有 android 蜂窝 / ICS OS 的平板电脑)通过本地 WIFI 网络保持连接 1-2 小时,并且需要交换数据(表示命令的简单对象)。

大多数时候,一个特定的平板电脑的行为就像发送命令的服务器,而其他设备就像接收命令的客户端,但“客户端”有时也会向“服务器”发送命令。

作为这种通信需求的解决方案 - 我使用了一段时间的开源
库,它封装了 TCP 客户端/服务器协议,称为 - Kryonet。我发现它非常易于使用,并且基本上可以完成工作,尽管它有时“不稳定” - 会产生很多断开连接。我无法承受这种断开连接,它破坏了整个流程和用例,导致客户端丢失命令。

我正在做一些恢复逻辑,重新连接客户端并向他们发送他们错过的内容,但这对于用例来说还不够好。

最近我听说了多播广播协议,甚至发现了一个开源库调用 - JGroups,它以最佳方式实现了该协议,并公开了简单易用的接口。仍然没有尝试过,但是从知道的人那里得到了建议,说对于我的目的来说 TCP 客户端/服务器应该更好。

  • 我应该使用什么最佳方法来实现我描述的行为?(不一定是我建议的两个之一)

TIA

4

1 回答 1

3

尽管 JGroups 有望为您的情况提供更好的解决方案,但您可能需要进行更多试验以确定发生断开连接的原因。由于您的客户端和服务器都是平板电脑,因此还有一些其他不相关的原因:

1)如果连接没有被维护,Service那么默认情况下它们将非常不可靠。(请参阅这个关于在 Android 中销毁单例的问题)

2) 如果套接字尚未设置为“keepalive”,那么它们将在任意秒数后超时。

3) 您使用的设备在进入睡眠状态时可能会关闭一些持久连接。

4) 平板电脑可能正在退出 WiFi 范围,并切换到移动网络。

在许多台式机上尝试代码的网络部分,以确定问题是出在 Kryonet 还是您的代码上,或者问题出在 Android 上运行。

于 2012-07-19T19:39:18.413 回答