码迷,mamicode.com
首页 > 其他好文 > 详细

ZeroMQ中PUB-SUB模式测试

时间:2016-11-04 07:43:29      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:分布   比较   效率   socket   zmq   option   编程   服务端   lte   

    因为公司有需求,对程序模块之间通信效率有较高的需求。之前公司用的通信组件是ActiveMQ,根据网上公布的测试结果显示其效率比较低, 后来考虑准备在新的项目中开始使用ZeroMQ。看了几天发现用起来比较简单,但是不知道怎么用进我们的项目中,加之项目比较着急就搁浅了,转而选择了与socketAPI相近的boost库中的Asio库,因为本人比较菜,最近测试发现了各种坑!!!各种坑!!!(对Asio不熟悉的童鞋对新项目慎用)

    然后最近就又开始看ZeroMQ,发现网上demo程序不少,但是解释清楚的很少,所以在这里记录测试记录,并督促自己有始有终。官网上有很好的demo程序,我就不贴出来了,要注意的是,demo都是最新的Linux版本的,所以源码最好也是下载最新的,windows上编译需要稍微改动。

    ZeroMQ推崇模式编程,第一种请求应答没什么说的。第二种PUB-SUB模式中,服务端没什么,对客户端的配置接口有疑问:

    int zmq_setsockopt (void *s, int option, const void *optval, size_t optvallen);

    参数一:socket句柄;

    参数二:socket的模式,这里因为是客户端,所以是订阅模式:ZMQ_SUBSCRIBE;

    参数三:订阅关键字;

    参数四:参数三的长度;

对于参数三,官方文档:

技术分享

该接口必须显示调用,否则为不订阅,测试结果:
char *filter = (argc > 1) ? argv[1] : "";
rc = zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, filter, strlen(filter));
不过滤,会订阅所有信息;

如果
filter = “test ”;
则订阅以“test ”为开头的信息,中间出现关键字的信息不会接收到,(!!测试中,对于关键字中的空格“ ”,linux完全匹配,windows下不能正确匹配,有待推敲);

到这里PUB-SUB模式在一对多的情景中,可以使用了。那么问题来了,客户端接收机的消息是在哪边开始过滤的呢?ZeroMQ号称最快的消息中间件,猜测不会这么傻的全部接收数据,然后再客户端过滤,测试结果显示也确实如此,直接上结果:

技术分享


通过抓包显示,只有接收到的信息,出现在了抓包结果中,那么效率问题也不用担心了,PUB-SUB模式就可以用起来了,测试后面的多种分布式模式也一样没问题,ZeroMQ赞一个先。











ZeroMQ中PUB-SUB模式测试

标签:分布   比较   效率   socket   zmq   option   编程   服务端   lte   

原文地址:http://www.cnblogs.com/xf-said/p/6028870.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!