pcb*_*pcb 6 java udp thrift zeromq
我正在尝试联系LAN上的所有人,以发现哪些设备当前正在使用ip并运行我的服务.运行该服务的每台设备都会知道哪些设备上线时连接了哪些设备.我有基本的网络经验(tcp/udp),但我没有做更多复杂的通信包.我想发布我迄今为止所研究/尝试的内容,并获得一些专家回复,以限制我对未来潜在解决方案的试错时间.
要求:
研究和尝试的事情:
UDP - 担心跨语言交流,缺乏可靠的交付,并且会添加另一种通信方式,而不是使用下面的解决方案.如果能找到另一个更完整的解决方案,我宁愿避免使用它.
Apache Thrift - 目前我已经尝试迭代所有潜在的ip并尝试连接到每个.这太慢了,因为每次尝试连接的超时都很长(当我打开时).我还没有找到任何广播选项.
ZeroMQ - 使用基本的zeromq完成了很少的测试,但我过去只使用过它的包装器.pub/sub功能似乎对这种情况很有用,但我担心订阅lan中的每个ip.还担心在尝试订阅尚未运行服务的ip时会发生什么.
根据我的要求,这些建议中的任何一个看起来都会比其他建议更好吗?您对可能更好的技术有任何其他建议吗?
谢谢.
你指定的基本上是两个独立的问题; 发现/监控和服务提供商.由于这两个问题有些正交,我将使用两种不同的方法来实现这一点.
让每个设备在预定义端口上通过UDP在LAN上连续广播(小)心跳/状态消息.此心跳应包含设备的ip/port(发送方)以及其他有趣数据,例如此设备提供的服务的地址(URL).如果需要降低带宽利用率,请选择紧凑的消息格式,例如协议缓冲区(可用于多种语言)或JSON以提高可读性.这些消息应定期发布,例如每隔5秒发布一次.
现在,让每个设备监听广播地址上的传入消息,并保留所有已知设备的内存映射[发送者,最后记录时间+其他数据].迭代地图说每秒钟,并删除已经静音x个心跳间隔(例如3 x 5秒)的发件人.这样,每个节点都将知道所有其他响应节点.
您不必知道任何IP:s,不需要任何额外的目录服务器,也不需要迭代所有可能的IP地址.此外,通过UDP发送/接收数据比通过TCP简单得多,并且不需要任何连接.它还可以减少开销,减少带宽利用率.
我想你在这里需要某种请求 - 响应.为此,我将选择一个简单的基于REST的API,通过HTTP,谈论JSON.如果您的有效负载相当大,请为协议缓冲区切换JSON有效负载,但在大多数情况下,JSON可能会正常工作.
总而言之,这将为您提供可靠,高效,可靠,跨平台且简单的解决方案.
| 归档时间: |
|
| 查看次数: |
1805 次 |
| 最近记录: |