Zmq的pub和sub模式是一种一对多的网络通讯方式
发布/订阅模式,全称为Publish/Subscribe,支持多个发布者/多订阅者,使用在消息单向传输的应用场景,消息总是从发布者发送到订阅者。一般的使用流程为:
pub端:
- 创建context
- 创建socket,设置ZMQ_PUB模式
- bind端口
- 循环发布消息send
sub端:
- 创建context
- 创建socket,设置ZMQ_SUB模式
- connect到pub端
- setsockopt设置ZMQ_SUBSCRIBE订阅的消息
- 循环接收recv
注意事项
————————————————
- pub端socket不能使用recv函数,同样,sub端不能使用send函数
- 当pub端由于到达了高水位而使ZMQ_PUB套接字进入静默模式的时候,所有发送到这个有问题的订阅者的消息都会被丢弃,直到静默模式终止
- pub端socket的zmq_send()函数永远不会阻塞
- sub端刚创建socket后是无法订阅到任何消息的,必须使用setsockopt设置订阅的消息后才能接收到
- sub端是根据参数前缀进行过滤的。订阅的内容以pub端发出的内容从头开始匹配为过滤条件,完全匹配订阅内容的消息会被sub接收,如订阅内容为"a"时,所有以a开头的消息都会接收
- 当订阅内容为"",长度为0时为订阅所有内容,因为所有消息都匹配成功
- 如果存在某个pub没有被任何sub连接,则该pub会丢弃所有的消息
- 如果采用tcp的连接方式,sub很慢时,消息将会堆积在pub,可以通过设置ZMQ_HWM选项来保护发布者,对于重要的消息,也可以写入硬盘等待发送
- pub和sub谁bind谁connect并无严格要求(虽本质并无区别),但仍建议pub使用bind,sub使用connect,在实际测试中,使用sub绑定而pub connect时,sub端无法接收到消息
- 一个显著的问题是,“sl