ZeroMQ的模式-综述

通过对Guide的阅读,可以发现ZeroMQ对这个世界中消息传输的模式进行了很好的抽象。为了描述模式,0mq定义了不同的socket。 0mq socket是0mq世界的东西,跟传统世界的socket是不一样的。

我们知道,传统的socket其实就是访问下面两种(TCP & UDP)对象的同步的接口:

  1. 面向连接的可靠字节流(SOCK_STREAM)
  2. 无连接的不可靠的数据报文(SOCK_DGRAM)

所以你可以说传统socket传输的是字节流或者独立的报文。

而0mq的socket传输的是消息(Message)。它是对**异步_消息**_队列(MQ)的一种抽象。官方的原话是:

ØMQ sockets present an abstraction of an asynchronous message queue, with the exact queueing semantics depending on the socket type in use.

异步的意思在这里指的是物理连接的创建、销毁、重连、传输对于用户来说都是透明的,这些东西都由0mq组织好了。它传输的是独立的消息。_队列_隐含的意思是万一消息无法到达对端则可能会被排队。

除了传统socket实现的一对一多对一以及一对多(广播)外,0mq的socket还可以用zmq_connect()发起连接到多个对端,并同时接受从多个用zmq_bind()绑定了0mq-socket的对端发起的链接,从而实现多对多

0mq归纳的模式有四种

  1. Request-reply Pattern
  2. Publish-subscribe Pattern
  3. Pipeline Pattern
  4. Exclusive pair Pattern

我想搞懂了这些模式,可能也就理解了zeromq的精髓和用法。只有这样才能灵活地、根据场景使用不同的模式,利用zeromq快速搭建网络拓扑。

Written on January 18, 2012