C++ 如何使用ZeroMQ(C+;+;)中的XPUB和XSUB实现带有代理的发布子网?

C++ 如何使用ZeroMQ(C+;+;)中的XPUB和XSUB实现带有代理的发布子网?,c++,zeromq,C++,Zeromq,我是zeromq的新手。最近我在zeromq的pub/sub上做了一些测试,我不知道如何使用zeromq中的XPUB和XSUB实现带有代理的pub-sub网络。希望得到您的帮助,非常感谢。通过以下步骤学习基础知识。对于代理,只需使用这个,它来自 intmain(intargc,char*argv[]) { zmq::context\u t context(1); zmq::socket_t前端(上下文,zmq_XSUB); frontend.bind(“tcp://*:5559”); 套接字后端

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

通过以下步骤学习基础知识。对于代理,只需使用这个,它来自

intmain(intargc,char*argv[])
{
zmq::context\u t context(1);
zmq::socket_t前端(上下文,zmq_XSUB);
frontend.bind(“tcp://*:5559”);
套接字后端(上下文,zmq\uxpub);
zmq_绑定(后端,“tcp://*:5560”);
zmq_代理(前端、后端、空);
返回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

有关setsockopt,请参阅0MQ API文档:


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

非常感谢。但我也发现了另一个问题。我先启动订阅服务器,然后启动代理服务器,然后启动发布服务器。在发布端,我发送了5000*2KB的消息,但在订阅端,我只收到了951*2KB的消息。我想知道这是否与“高水位线”有关?我能为它做些什么?谢谢。这是一个常见的问题,被称为“用户速度慢”。即使您先启动订阅服务器,某些消息也可能会丢失。您可以通过在订阅服务器发送消息之前将其与发布服务器同步来避免删除消息,请参见:是的,我做了一些事情来标记每条消息,发现订阅服务器丢失的是954之后的消息,实际上发布服务器已发送了5000条消息。我的意思是我编写了“sleep()”在发布服务器发布消息之前的几秒钟,
frontend.bind(…)
zmq\u bind(backend,…)
之间有什么区别?