轉載自: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快速搭建網絡拓撲。