如何在ZeroMQ(C++)中使用XPUB和XSUB实现带有代理的Pub Sub Network

How to implement Pub-Sub Network with a Proxy by using XPUB and XSUB in ZeroMQ(C++)?

本文关键字:实现 XSUB 代理 Network Sub Pub XPUB ZeroMQ C++      更新时间:2023-10-16

我是zeromq的新手。最近我对zeromq的pub/sub做了一些测试,我不知道如何在zeromq中使用XPUB和XSUB来实现带代理的pub-sub-Network。希望你的帮助,非常感谢。

通过示例学习基础知识。对于代理,只需使用这个,它来自msgqueue.cpp

int main (int argc, char *argv[])
{
    zmq::context_t context(1);
    zmq::socket_t frontend (context, ZMQ_XSUB);
    frontend.bind("tcp://*:5559");
    zmq::socket_t backend (context, ZMQ_XPUB);
    zmq_bind (backend, "tcp://*:5560");
    zmq_proxy (frontend, backend, NULL);
    return 0;
}

代理:

int main (int argc, char *argv[]) {
    zmq::context_t context(1);
    zmq::socket_t frontend (context, ZMQ_XSUB);
    
    //set hwm...
    frontend.bind("tcp://*:5559");
    zmq::socket_t backend (context, ZMQ_XPUB);
    
    //set hwm...
    zmq_bind (backend, "tcp://*:5560");
    zmq_proxy (frontend, backend, NULL);
    return 0;
}

我丢失消息的原因是我应该在绑定或连接之前调用setsockopt。

请参阅0MQ API文档了解setsockoopt:

注意:除ZMQ_SUBSCRIBE、ZMQ_UNSUBSCRIBE和ZMQ_LINGER外,所有选项仅对后续套接字绑定/连接生效。