需要使用 Java 或 android 在局域网内进行可靠数据广播的建议

Need suggestions for reliable data broadcasting inside LAN using Java or android

我们正在开发具有以下要求的 Android 项目。

我们做过的研究:-

我们正在研究的解决方案:-

所以我的问题是,您有没有研究过这些混合方法?或者你能建议任何其他方法吗?

您的混合方法是正确的选择。

将你的问题干净利落地拆分成多个部分并独立解决它们:

  • 发现:设备需要能够发现服务器(如果有的话)。
  • Select 服务器:决定您的哪些设备承担服务器角色。
  • 服务器实现:服务器将所有数据分发到所有设备并在必要时发送通知。推送或拉取通知并不重要。
  • 客户端实现:客户端只与服务器对话。包含服务器的设备也应该包含一个普通的客户端,可能直接将数据传递给服务器,但使用相同的抽象协议。

您可以使用 mDNS(又名 Bonjour 或 zeroconf)进行发现,但我什至不推荐这样做。它制造的问题往往多于解决的问题,而且它不能解决您的 'I need one server' 问题。我建议你为发现手工制作一个简单的 UDP 广播协议,它已经告诉你服务器是谁,如果有的话。

Select服务器:一种方法是使用您拥有的网络元数据,例如'use the device with the highest IP address'。这通常比花哨的仲裁算法更有效。建立服务器后,新设备将使用它,而不是切换服务器角色。

使用 UDP 广播进行发现,手动启发式重复。没有花哨的逻辑,只是让你的协议对重复的数据包具有弹性并重复你的数据包。 (无论如何,您的 WLAN 路由器可能会在您不知情的情况下重复您的数据包。)

您可能希望每个客户端使用两个 TCP 连接,可能连接到两个不同的服务器端口,但这无关紧要:一个控制连接(总是非常灵敏,数据量不大,每个只有几百字节)消息)和一个数据连接(对于大部分数据,您的 > 5 MB 块)。这样一切都保持响应。