zmq xsub/xpub 实现消息订阅(一)

xpub/xsub官网的解释是增强了pub/sub模式,并且支持双向消息收发。经过阅读其源码,发现xpub/xsub不仅仅是增强了pub/sub,还有些许改动,如:在xsub类型的socket上不能设置subscribe选项:zmq_setsocket(socket,ZMQ_SUBSCRIBE,0x01);

会报不支持的错误,那么,xsub类型的socket到底该如何达到订阅消息的目的呢?

1、官网的:https://rfc.zeromq.org/spec/29/  竟然没有解释。。。。有点神操作了

2、http://api.zeromq.org/3-2%3azmq-socket#toc12  的ZMQ_XSUB有说明,如下(不翻译了):

     Same as ZMQ_SUB except that you subscribe by sending subscription messages to the socket. Subscription message is a byte 1 (for subscriptions) or byte 0 (for unsubscriptions) followed by the subscription body.

Summary of ZMQ_XSUB characteristics
Compatible peer sockets ZMQ_PUBZMQ_XPUB
Direction Unidirectional
Send/receive pattern Receive messages, send subscriptions
Incoming routing strategy Fair-queued
Outgoing routing strategy N/A
Action in mute state Drop

做个简单的解释:ZMQ_XSUB通过发送订阅消息来订阅topic——以1开 头的消息是订阅,以0开头的消息是取消订阅;

如:1、发送1"md.sse",则表示订阅md.sse这个topic

        2、发送1"md",则表示订阅md这个topic                 

        3、发送1则表示订阅所有的消息,默认不订阅消息,所以会接收不到。。。。

   #1"md"没有写错,可以建一个buf,把1和topic写到buf中,再发送;如:        

std::string msg(1,0x1);
msg.append("md.sse");
xsub_socket.send(msg);  #订阅了md.ssetopic    #这里使用的是zmqpp库,直接使用libzmq也是类似的

扫描二维码关注公众号,回复: 11904489 查看本文章

解释以下:

58行:从输入的topics中查找有没有,,如果有,则说明包含了多个topic,

60行:以逗号为分割符分割topic,并存储在topic中,

65行:订阅topic

70行:订阅topic

实例代码后面再上传

猜你喜欢

转载自blog.csdn.net/lianshaohua/article/details/108776728
zmq