转载自:http://www.kongch.com/2012/01/zeromq-patterns/
通过对Guide的阅读,可以发现ZeroMQ对这个世界中消息传输的模式进行了很好的抽象。为了描述模式,0mq定义了不同的socket。 0mq socket是0mq世界的东西,跟传统世界的socket是不一样的。
我们知道,传统的socket其实就是访问下面两种(TCP & UDP)对象的同步的接口:
- 面向连接的可靠字节流(SOCK_STREAM)
- 无连接的不可靠的数据报文(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归纳的模式有四种
- Request-reply Pattern
- Publish-subscribe Pattern
- Pipeline Pattern
- Exclusive pair Pattern
我想搞懂了这些模式,可能也就理解了zeromq的精髓和用法。只有这样才能灵活地、根据场景使用不同的模式,利用zeromq快速搭建网络拓扑。