首页 > 代码库 > ZeroMQ中PUB-SUB模式测试
ZeroMQ中PUB-SUB模式测试
因为公司有需求,对程序模块之间通信效率有较高的需求。之前公司用的通信组件是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模式测试
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。