我正在尝试联系 LAN 上的每个人,以了解哪些设备当前正在使用该 ip 并运行我的服务。运行该服务的每台设备都会在它们上线时知道哪些其他设备已连接。我有基本的网络经验(tcp/udp),但我对更复杂的通信包做得不多。我想发布我迄今为止研究/尝试过的内容,并获得一些专家的回复,以限制我在未来潜在解决方案上的试错时间。
要求:
- 目前使用java,但需要跨语言通信。
- 必须在可接受的时间范围内(最多几秒)完成,最好是可靠的。
- 我想在广播和以后的通信中使用类似的技术,以避免引入多个包/技术的额外复杂性。
- 目前我正计划对已知 ip 进行心跳以提醒仍然连接,但我可能希望稍后继续广播到 lan。
- 我有兴趣为这项服务使用跨语言 rpc 通信,但这种技术不一定必须使用它。
- 后期通信(非广播)必须可靠。
研究和尝试的事情:
UDP - 担心跨语言通信,缺乏可靠的交付,并会添加另一种通信方式,而不是使用像下面这样的解决方案。如果可以找到另一个更完整的解决方案,我宁愿避免它。
Apache Thrift - 目前我已经尝试遍历所有潜在的 ip 并尝试连接到每一个。这太慢了,因为每次尝试连接的超时都很长(当我调用 open 时)。我还没有找到任何广播选项。
ZeroMQ - 用基本的 zeromq 做了很少的测试,但我过去只使用过它的包装器。pub/sub 功能似乎对这种情况很有用,但我担心订阅局域网中的每个 ip。还担心尝试订阅尚未在其上运行服务的ip时会发生什么。
考虑到我的要求,这些建议中的任何一个似乎比其他建议更有效吗?您对可能更好的技术有任何其他建议吗?
谢谢。