X

Zeromq简介:三种模式

简述Zmq的三个模型:

  1. 1.       Request-Reply 

我们通过程序来认知,首先是一个hello word的程序,

Client端:

Server端:

 

这个比较好理解,服务端监听5555端口,等待连接,一旦客户端连接上以后,就打印出客户发送过来的数据,睡1秒,然后响应World。当没有客户端连接的时候,程序是一只阻塞在->recv()这里,等待客户端的连接。

  1. 第二种模式  订阅者

 

刚刚我们看到的是,客户端主动连接到服务器,然后接受响应,类似于http,客户端Get动作,然后得到结果。而这种模式这是,Publisher将信息分发给各个Subscriber。他像一个广播,告诉订阅者,他所关心的信息。

我们的服务器的示例:

我们以订阅天气预报为例:

 

服务器端,绑定5556端口,传送三个数值,其中zipcode是一个随机数。

 

客户端一,则设置一个过滤的参数10001,表示接受频道(例如,我只需要杭州的天气预报),为了便于观察,我们设置客户端每1s打印一次,并且在做一个客户端接受10002频道。运行的结果是这样的:

另一个客户端结果是这样的:

 

需要注意的是,在这个模式下,必须要设置一个过滤参数,代表你所订阅的频道,否则会接受不到数据。这种模式有个问题:对于后来才加入的订阅者,在他加入之前所发送的信息,他接收不到?

第三种模式 :Parallel Pipeline 数据并行流水线

在这种模型下面,最上面的生成任务,将任务push给Worker们。Worker们一边连接包工头的任务,一边把计算结果下放到Sink。最后由Sink收集计算结果,进行相应的工作。

包工头代码 :http://zguide.zeromq.org/php:taskvent

工人代码 : http://zguide.zeromq.org/php:taskwork

最后结果代码:http://zguide.zeromq.org/php:tasksink

 

我比较关心的是订阅者模式,他是否可用于集群信息的分发? 如何保证后来加入者能够收到代码? 欲知后事如何,且听下回分解!

Categories: 系统架构学习
Tags: ZeroMQzmq
龙安_任天兵: 不忘初心,方得始终!