简述Zmq的三个模型:
- 1. Request-Reply
我们通过程序来认知,首先是一个hello word的程序,
Client端:
Server端:
这个比较好理解,服务端监听5555端口,等待连接,一旦客户端连接上以后,就打印出客户发送过来的数据,睡1秒,然后响应World。当没有客户端连接的时候,程序是一只阻塞在->recv()这里,等待客户端的连接。
- 第二种模式 订阅者
刚刚我们看到的是,客户端主动连接到服务器,然后接受响应,类似于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
我比较关心的是订阅者模式,他是否可用于集群信息的分发? 如何保证后来加入者能够收到代码? 欲知后事如何,且听下回分解!