0MQ-获取消息ip

0MQ - get message ip

本文关键字:ip 消息 获取 0MQ-      更新时间:2023-10-16

首先,我要感谢您的精彩库!我喜欢它。一个客户正在将自己连接到服务器。服务器应该保存IP并在以后处理它(我真的需要IP)。我找到了答案:http://lists.zeromq.org/pipermail/zeromq-dev/2010-September/006381.html但我不明白我是如何从消息中获得IP的(XREP)。。。我想我只能读取ID,但IP由0MQ内部管理。他的第二个解决方案建议将IP作为信息的一部分发送,但我不明白如何获得"公共"IP。我发现那篇文章:在ZeroMQ 中获取TCP地址信息

 is pass bind a service to an ephemeral port, get a full connection endpoint ("tcp://ipaddress:port")

我不明白这是怎么回事。他的意思是网络服务吗?在我看来,最好将IP从0MQ中取出(它已经有了IP)。我甚至会为此调整0MQ,如果有人能指出IP保存的地方,但找不到它。套接字类型目前并不那么重要。我更喜欢smth REQ-REP。非常感谢。

摘要:

TL;DR对您的问题的回答是:您无法使用ZeroMQ API获取发送消息的对等方的IP地址。

解释:

ZeroMQ不公开对等IP地址,因为它与ZeroMQ设计用于的基于消息的通信无关。当ZeroMQ可以获取连接到服务器客户端(在示例中使用此处描述的方法)的IP地址时,这是无用的。更详细的解释是它如何在ZeroMQ和任何其他服务器实现中工作。

连接的服务器端不会通过将IP映射到客户端的哈希表来处理连接的客户端,而是通过跟踪连接的"套接字"(套接字描述符)-当服务器接受(使用accept())连接时,它会从操作系统接收套接字描述符,用于与连接的对等方通信。服务器所要做的就是保留描述符,以便从客户端读取()和向客户端写入()。连接到服务器的另一个客户端接收另一个套接字描述符。

总之:即使ZeroMQ能够为您提供连接对等体的IP,您也不应该依赖它。ZeroMQ对您隐藏了连接管理,因此您可以专注于消息传递。连接管理包括重新连接,这可能会导致IP的更改,而不会更改另一端连接的实际ZeroMQ套接字。

因此,这里有一个示例,说明您可能想要获得消息传递的ip地址:我们有一个服务器,其工作是将更新同步到偶尔连接的客户端上(想想这里的移动设备,尽管这是移动设计的一个极端示例。)

当移动设备接入网络时,它会通过经销商路由器连接向服务器发送一份固件文件列表。服务器具有所有适用固件文件的列表;如果客户端需要更新,它将通过单独的机制启动更新。

由于设备的IP可以(而且确实)更改,我们需要知道与移动设备相关的IP地址,即现在。

是的,我们绝对可以让客户端在消息中发送它的IP地址,但这又浪费了n字节宝贵的卫星广播时间,虽然不是纯粹的邪恶,但肯定很烦人。Zmq已经有了这些信息,如果没有这些信息,它将无法生成回复。地址在套接字数据中,没有理由不在消息中(可选地,对于所有使用有线网络并认为断开连接是例外的人来说)包含对套接字结构的引用,这样你就可以从中获取地址。除了迂腐的宗教信仰,这在zmq中太常见了。

ZeroMQ的设计方式没有提供有关远程IP的信息。据我所知,你必须通过你的应用程序来管理这一点,将信息作为某种信息发送

消息本身使用IP不可知的ID,与任何特定接口相比,该ID与ZeroMQ实例的运行关系更大。这是因为连接这两个实例的传输方法和接口可能不止一个。