首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向局域网上的每一个人广播

向局域网上的每一个人广播
EN

Stack Overflow用户
提问于 2013-01-12 17:45:16
回答 3查看 2.3K关注 0票数 6

我试图与局域网上的每个人联系,以了解哪些设备目前正在使用ip并运行我的服务。运行该服务的每个设备都将知道其他哪些设备在联机时连接。我有基本的网络经验(tcp/udp),但对于更复杂的通信包,我没有做太多工作。我想张贴我已经研究/尝试到目前为止,并获得一些专家的答复,以限制我的尝试和错误的时间,在未来的潜在解决方案。

需求:

  • 目前使用java,但需要跨语言通信.
  • 必须在可接受的时间范围内完成(最多几秒钟),最好是可靠的。
  • 我希望在广播和以后的通信中使用类似的技术,以避免引入多个包/技术的额外复杂性。
  • 目前,我正计划对已知的ip进行心跳,以提醒仍然连接的ip,但我可能希望稍后继续向lan广播。
  • 我对此服务使用跨语言rpc通信很感兴趣,但这种技术并不一定要使用它。
  • 以后的通信(非广播)必须是可靠的。

研究与尝试:

  • UDP --担心跨语言的交流,缺乏可靠的交付,并且会增加另一种交流方式,而不是像下面这样的解决方案。如果能找到另一个更完整的解决方案,我宁愿避免。
  • Apache -目前我已经尝试遍历所有潜在的ip并尝试连接到每个ip。这太慢了,因为每次尝试连接(当我调用open时)超时时间都很长。我还没有找到任何广播选项。
  • zeromq -用基本的ZeroMQ做了很少的测试,但我过去只使用过它的包装器。pub/sub特性似乎对这个场景很有用,但我担心会订阅局域网中的每个ip。还担心当尝试订阅一个还没有运行服务的ip时会发生什么。

考虑到我的要求,这些建议中是否有一条看起来比其他建议更有效?你有没有其他更好的技术建议?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-12 20:39:59

您所指定的基本上是两个独立的问题:发现/监视和服务提供者。由于这两个问题在某种程度上是正交的,我将使用两种不同的方法来实现。

发现/监测

让每个设备在预定义端口上通过UDP在LAN上连续广播(小)心跳/状态消息。这个心跳应该包含设备的ip/端口(发送方),以及其他有趣的数据,例如该设备提供的服务的地址(URL)。如果需要降低带宽利用率,请选择紧凑的消息格式,例如协议缓冲区(以多种语言提供)或JSON以提高可读性。这些信息应定期发布,例如每5秒发布一次。

现在,让每个设备监听广播地址上的传入消息,并保存内存中的地图发送者,最后记录的时间+所有已知设备的其他数据。迭代地图,每秒钟说一次,并删除发送者谁已经沉默了x心跳间隔(例如3x5秒)。这样,每个节点将知道所有其他响应节点。

您不必知道任何IP:s,不需要任何额外的目录服务器,也不需要迭代所有可能的IP地址。此外,通过UDP发送/接收数据比通过TCP简单得多,而且不需要任何连接。它还产生较少的开销,这意味着更少的带宽利用率。

服务提供商

我想你会在这里得到某种请求-回应。为此,我将选择一个简单的基于REST的API,而不是HTTP,讨论JSON。如果有效负载相当大,则切换协议缓冲区的JSON有效负载,但在大多数情况下,JSON可能工作得很好。

所有这些都会给你一个坚实、高效、可靠、跨平台和简单的解决方案.

票数 9
EN

Stack Overflow用户

发布于 2013-01-13 00:20:54

看看ZeroMQ指南中的Zyre项目(第8章)。这是一个相当完整的本地网络发现和消息传递框架,一步一步地开发。您肯定可以重用UDP广播和发现,其他的也可以重用。还有一个完整的Java实现,https://github.com/zeromq/zyre

票数 4
EN

Stack Overflow用户

发布于 2013-01-12 17:53:21

我将使用JMS,因为它可以跨平台(至少对于客户机),您仍然需要决定如何对数据进行编码,除非您有具体的想法,否则我将使用XML或JSon,因为它们易于阅读和检查。

您可以使用ZeroMQ实现更高的性能和更低级别的访问。除非你知道你需要这个,否则我怀疑你不需要。

您可以从JMS的更高级别的特性中获益。

顺便说一句:这些服务隐式地进行服务发现。除了监视之外,不需要知道IP地址,也不需要知道服务是向上的还是向下的。他们的设计假设你想不想知道这些细节。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14296070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档