首先,我要感谢这个惊人的lib!我喜欢它.客户端将自己连接到服务器.服务器应该保存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())连接时,它从操作系统套接字描述符接收用于与连接的对等体通信.所有服务器要做的就是将该描述符保持为read()from和write()到该客户端.连接到服务器的另一个客户端接收另一个套接字描
总结一下:即使ZeroMQ能够为您提供连接对等体的IP,您也不应该依赖它.ZeroMQ隐藏了您的连接管理,因此您可以专注于消息传递.连接管理包括重新连接,这可能导致IP的更改,而无需更改另一侧连接的实际ZeroMQ插槽.
所以这里有一个例子,说明为什么你可能希望获得一个消息来自的IP地址:我们有一个服务器,它的工作就是将更新同步到偶尔连接的客户端上(想想这里的移动设备,尽管这是一个极端的例子)移动deivce.)
当移动单元进入网络时,它会通过经销商 - 路由器连接向服务器发送其固件文件列表.服务器有一个包含所有适用固件文件的列表; 如果客户端需要更新,它将通过单独的机制启动更新.
由于设备的IP可以(并且确实)发生变化,因此我们需要知道与此移动设备相关的IP地址,即现在.
是的,我们绝对可以让客户端在消息中发送它的IP地址,但这浪费了另外n个字节的宝贵的卫星播出时间,虽然不是纯粹的邪恶,但肯定很烦人.Zmq已经拥有此信息,如果没有,则无法生成回复.地址在套接字数据中,没有理由没有消息(可选地,对于所有使用有线网络并认为断开连接的人都是例外)包括对套接字结构的引用,以便您可以从中获取地址.除了迂腐的宗教信仰,这在zmq中太常见了.