0MQ - 获取消息ip

 居生扬_977 发布于 2023-02-13 13:03

首先,我要感谢这个惊人的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之类的.谢谢!

2 个回答
  • 摘要:

    TL; DR回答你的问题是:你无法使用ZeroMQ API获得发送消息的对等体的IP地址.

    说明:

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

    连接的服务器端不通过将IP映射到客户端的哈希表来处理连接的客户端,而是通过跟踪连接的"套接字"(套接字描述符) - 当服务器接受(使用accept())连接时,它从操作系统套接字描述符接收用于与连接的对等体通信.所有服务器要做的就是将该描述符保持为read()from和write()到该客户端.连接到服务器的另一个客户端接收另一个套接字描

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

    2023-02-13 13:07 回答
  • 所以这里有一个例子,说明为什么你可能希望获得一个消息来自的IP地址:我们有一个服务器,它的工作就是将更新同步到偶尔连接的客户端上(想想这里的移动设备,尽管这是一个极端的例子)移动deivce.)

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

    由于设备的IP可以(并且确实)发生变化,因此我们需要知道与此移动设备相关的IP地址,即现在.

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

    2023-02-13 13:07 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有