zeromq模式介绍

zeromq有一些基本的套接字类型分别是
- REQ
- REP
- DEALER
- ROUTER
- PUB
- SUB
- PAIR
这里所说的套接字和BSD的套接字不是一个概念。一般来说BSD套接字是两个节点的链接。而zeromq套接字是一对多的链接。并且它们各有自己的规则。可以进行多种组合。比如一个REQ可以和ROUTER,REP进行链接,而不能和PUB和SUB进行链接。总得来说谁和谁可以建立链接是和该套接字的运行模式相关的。其中一种模式就是收发顺序,比如你不能让两个上来都监听的套接字进行链接,因为他们都等着对方先说话,自己在那里等着回复。这就好比你把两个http服务器链接在一起他们不知道怎么办一样,甚至它们压根就不能建立链接。下面用一些简单组合模式来看看每种zeromq套接字的行为模式。

REQ-REP模式

请求回复模式,REQ请求然后等待响应。REQ监听然后回复。
REQ方先发后收,send-recv。REP方先收后发,recv-send。REQ和REP不停的重复它们的操作循环。REP类似于一个http服务器,REQ类似于客户端。一个REP可以连接多个REQ端,REP顺序处理REQ的请求。
描述一个场景用来解释请求回复模式的运作。想象有很多人在玩抛接球的游戏,游戏的一方是REQ另一方是REP。REQ是多方,REP只有一个。REQ轮流将球抛给REP,然后REP回传球。轮流代表不能同时进行,REP要完整的做完一次接和抛的动作才能进行下一个。
如果你看zeromq代码会发现REQ是DEALER的子类,REP是ROUTER的子类。

PUSH-PULL模式

推拉模式,PUSH发送,send。PULL方接收,recv。PUSH可以和多个PULL建立连接,PUSH发送的数据被顺序发送给PULL方。比如你PUSH和三个PULL建立连接,分别是A,B,C。PUSH发送的第一数据会给A,第二数据会给B,第三个数据给C,第四个数据给A。一直这么循环。
这个类似现实中的发牌,PUSH是发牌方,PUSH顺序给每个PULL发牌。顺序代表发完一个发另一个,不能同时进行。

PUB-SUB模式

发布订阅模式。PUB发送,send。SUB接收,recv。和PUSH-PULL模式不同,PUB将消息同时发给和他建立的链接,类似于广播。另外发布订阅模式也可以使用订阅过滤来实现只接收特定的消息。订阅过滤是在服务器上进行过滤的,如果一个订阅者设定了过滤,那么发布者将只发布满足他订阅条件的消息。
这个就是广播和收听的关系。PUB-SUB模式虽然没有使用网络的广播功能,但是它内部是异步的。也就是一次发送没有结束立刻开始下一次发送。

DEALER-ROUTER模式

代理模式,这种模式主要用于扩容REQ-REP模式的。如果你需要扩容多个REP服务器。那么就可以用代理模式。ROUTER对应于REQ,它相当于一个REP服务器,执行先收后发,recv-send循环。但是内部它将前端REQ的请求收进来,然后将请求发给DEALER,DEALER接收ROUTER的消息,将消息发送给REP,只不过DEALER面对的是N个REP。通过代理模式的改造,REQ-REP将具有自动扩容能力。
DEALER-ROUTER模式都是异步的,如果将这个机制整合在一起运作。类似于一个异步的接线员,是一个N对接线员对M的链接拓扑关系。它将N个REQ请求链接到M个REQ上。并且保证它们是负载均衡的。

PAIR-PAIR模式

配对模式,主要用于inproc进行进程内的通信。你可以在一个线程中调用recv等在哪里,另一个进程使用send来让接收线程继续。
这种模式类型与信号灯。

总结

zeromq使用模式的组合来完成网络通信任务和扩容任务。同时隐藏了复杂的网络编程细节,比如失败重连,补发消息,跨协议的桥接等复杂的网络编程。另外zeromq为你在不同的操作系统提供一个统一的编程界面,也简化了移植问题。

注意

某些zeromq模式中的收发顺序模式,既不能打乱也不能省略。比如你不能用SUB进行发送将引发错误。REP模式也不能省略recv-send中的任何一个,不能跳过recv直接进行send,这都将引发错误。
另外zeromq不能为你实现其他的协议,比如你不能用zeromq实现一个HTTP服务器,zeromq有自己的传输协议,或者说zeromq有自己的协议用来使上面的模式运作。

你可能感兴趣的:(zeromq)