Request-Reply模式
- 对于client来说必须严格按照先调用zmq_send() 函数,然后调用zmq_recv()函数的顺序来执行
- 对于server来说,执行时序相反
- 如果不按照这个时序来,可能会发生错误,或者信息丢失
- 可以有多个client同时连接到server
Publish-Subscribe模式
- SUB socket必须调用zmq_setsockopt()函数设置描述符。
- client可以调用 zmq_recv(),从SUB socket上读取数据,但是不能往SUB socket上写数据,否则会发生错误
- 此模式是异步通信模式,即使没有client连接上server,server也在源源不断的发送数据。所以,即使client各种设置正确,也有可能接收不到数据,因为当client连接上的时候可能它所关心的数据已经发送完毕了。
- 一个subscriber 可以连接到多个publisher
- 如果publisher 没有subscribers连接他,发送的消息会被简单的丢弃
- 如果使用TCP连接,并且subscribers处理很慢,那么消息会在publisher这边放入队列中
Divide and Conquer
此模式解释如下:
- 一个ventilator负责生产可以并行执行的任务
- 一系列的workers负责处理任务
- sink负责从工作进程收集处理结果
- 在Ventilator和worker之间必须要有同步,这点是很难处理。当所有的Worker就绪之后,再生产任务,这样Worker就可以平均处理。如果不做同步,第一个连接上Ventilator的Worker将会做大量的工作
Sink从Worker进程收集处理结果,结果存放在fair-queuing队列。其模型如下: