轉(zhuǎn)載自:http://www.kongch.com/2012/01/zeromq-patterns/
通過對(duì)Guide的閱讀,可以發(fā)現(xiàn)ZeroMQ對(duì)這個(gè)世界中消息傳輸?shù)哪J竭M(jìn)行了很好的抽象。為了描述模式,0mq定義了不同的socket。 0mq socket是0mq世界的東西,跟傳統(tǒng)世界的socket是不一樣的。
我們知道,傳統(tǒng)的socket其實(shí)就是訪問下面兩種(TCP & UDP)對(duì)象的同步的接口:
- 面向連接的可靠字節(jié)流(SOCK_STREAM)
- 無連接的不可靠的數(shù)據(jù)報(bào)文(SOCK_DGRAM)
所以你可以說傳統(tǒng)socket傳輸?shù)氖亲止?jié)流或者獨(dú)立的報(bào)文。
而0mq的socket傳輸?shù)氖窍?Message)。它是對(duì)異步消息隊(duì)列(MQ)的一種抽象。官方的原話是:
ØMQ sockets present an abstraction of an asynchronous message queue, with the exact queueing semantics depending on the socket type in use.
異步的意思在這里指的是物理連接的創(chuàng)建、銷毀、重連、傳輸對(duì)于用戶來說都是透明的,這些東西都由0mq組織好了。它傳輸?shù)氖仟?dú)立的消息。隊(duì)列隱含的意思是萬一消息無法到達(dá)對(duì)端則可能會(huì)被排隊(duì)。
除了傳統(tǒng)socket實(shí)現(xiàn)的一對(duì)一、多對(duì)一以及一對(duì)多(廣播)外,0mq的socket還可以用zmq_connect()發(fā)起連接到多個(gè)對(duì)端,并同時(shí)接受從多個(gè)用zmq_bind()綁定了0mq-socket的對(duì)端發(fā)起的鏈接,從而實(shí)現(xiàn)多對(duì)多。
0mq歸納的模式有四種
- Request-reply Pattern
- Publish-subscribe Pattern
- Pipeline Pattern
- Exclusive pair Pattern
我想搞懂了這些模式,可能也就理解了zeromq的精髓和用法。只有這樣才能靈活地、根據(jù)場(chǎng)景使用不同的模式,利用zeromq快速搭建網(wǎng)絡(luò)拓?fù)洹?/div>