让ZMQ在windows中成功支持PGM

14 篇文章 0 订阅
3 篇文章 0 订阅

为了弄明白ZMQ中的PGM协议,博主焦虑了不少。总结原因:1、ZMQ的中文文献太少;2、ZMQ在windows下的文献太少;3、国内不翻墙能访问的网站太少。

  • 遇到一个看起来不那么棘手的问题

好了,言归正传,本文仅记录博主的艰辛历程。

在官网下载好ZeroMQ源码后,编译好,然后按照文档写出Pub-Sub模式的测试代码。竟然在bind的时候就报错

  void *publisher = zmq_socket (context, ZMQ_PUB);
    int rc =
		zmq_bind(publisher, "pgm://192.168.31.100;239.192.1.1:5555");

查看错误码129 使用zmq_strerror 得到字符串竟然是“”Not supported“,有些心塞,跟踪源码发现是有一个宏的定义ZMQ_HAVE_OPENPGM。原来:ZeroMQ在使用pgm/epgm协议时,如果此宏没有定义,则返回上述代码。于是我在vs中定义好该宏,然后重新编译libzmq项目,又是一堆错,OpenPgm原来是另一个库。在源码目录foreign有它的源码。当然如果有源码一切就好说(以后博主再也不会这么天真了)。

  • 开始寻找解决问题方案

大致看了libPGM 的目录,发现没有MSVC的项目文件,于是我新建VS项目,将Libpgm的文件一个一个加入,编译后还是报了一堆错。 博主此时深吸一口气,以为凭着自己的小聪明就能化解眼前的难题。归纳报错的原因。主要有:A.头文件打不开,如glib.h、stdbool.h、net-snmp目录下的一堆H文件。这么多依赖的库都没有,博主开始还很有耐心的一个一个解决,但是到后来发现这是一个无底洞。整理了下思路,我目前的重点是要找到在windows下使用ZMQ的PGM协议,并不是要源码呀! 想明白了这个,博主先找到libpgm官网上编译好的版本,安装完成发现也不支持pgm。于是博主开始在网上找OpenPGM 编译好的库。而使用baidu基本收不到相关的中文结果,搜出来的英文网站基本打不开。无奈之下,只能想尽办法去翻墙找答案。皇天不负有心人。终于在某网站上找到了。能直接翻墙的请进入该链接下载。。

https://miru.hk/openpgm/

 当然,如果你不能翻墙也没有关系,请在CSDN上直接下载(此处有5.1.118与5.2.122版本,下载这两个版本是因为博主编译的zeromq-3.2.5与zeromq-4.1.5分别使用的这两个版本的openpgm

http://download.csdn.net/detail/pc0de/9627713
http://download.csdn.net/detail/pc0de/9627713


  • 重新编译ZeroMQ,问题解决

下载安装完毕后,可以在安装目录中找到lib文件夹、include文件夹。libzmq项目设置包含目录与链接pgm.lib。然后重新编译libzmq。使用pmg协议便在内网成功跑起来了。

  • 遗留问题

问题解决了,那该结束了吗?其实并没有,因为博主又遇到了新的问题。使用PGM在局域网内成功跑起来没错,但是为何在一台机器上同时开启订阅分发,订阅端收不到数据呢?

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值