zmq以及c/cpp for zmq


zmq的库的资料太过丰富。为了不误人子弟,还是将诸位引导到最权威的zmq作者的项目主页吧。自行github,不送。


我只说明一点,zmq的作者后面用c语言重写了zmq,新的库叫nanomsg。

相比zmq(2.0),nanomsg有不少优势,其一,sub/pub过滤是在pub方处理,zmq是sub方过滤(减少流量)。其二,nanomsg用的epoll。

如果业务非常确定只涉及C/C++以及python,则可以放心采用nanomsg,否则,不用考虑,选ZMQ是不二只选。

ZMQ 的官方sample有一些bug,特别是兼容C++ 11的时候,官方的一些写法是编译不过的。

例如ZMQ的代理相关的例子,MQ的代理。

//
//  Simple message queuing broker in C++
//  Same as request-reply broker but using QUEUE device
//
// Olivier Chamoux <olivier.chamoux@fr.thalesgroup.com>


#include "zhelpers.hpp"

int main (int argc, char *argv[])
{
    zmq::context_t context(1);

    //  Socket facing clients
    zmq::socket_t frontend (context, ZMQ_ROUTER);
    frontend.bind("tcp://*:5559");

    //  Socket facing services
    zmq::socket_t backend (context, ZMQ_DEALER);
    backend.bind("tcp://*:5560");

    //  Start the proxy
    zmq::proxy(frontend, backend, nullptr);    //error
    return 0;
}


上述代码在C++ 98标准中可以编译通过(代码作者声明的说法),C++ 11中则会报错。

转去看看看报错的行的

 inline void proxy (void *frontend, void *backend, void *capture)
    {
        int rc = zmq_proxy (frontend, backend, capture);
        if (rc != 0)
            throw error_t ();
    }
我们看看zmq_proxy的定义

ZMQ_EXPORT int zmq_proxy (void *frontend, void *backend, void *capture);

接受的是指针类型,传入类的对象实际上是不妥的,严格一点的编译检查,纵使是C++ 98标准按道理也是不能编译通过的。

另外需要注意的是,别看到接收的是指针就试图通过取地址做参数,强制转换编译通不过。

 int rc = zmq_proxy (&frontend, &backend, capture);  //error

https://github.com/nanomsg/nanomsg

nanomsg的几种常见模式如下官方文档,十分推荐,这是分布式消息的精华。很想转载这篇博客。。还是忍住了。

http://tim.dysinger.net/posts/2013-09-16-getting-started-with-nanomsg.html


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值