zeromq 模式說的很地道

2021-06-28 14:45:30 字數 1120 閱讀 3601

2013-10-20 20:59

マジックfq

| |

瀏覽815次

2013-10-20 22:08

提問者採納

很早就聽說了zeromq 這個專案,當時不太在意.

後來同事kasicass 對這個專案做了研究和分享 ,開始重視起這個專案來.

1) libevent封裝了對網路i/o,訊號,定時器等的處理,可以基於它之上做網路層的開發.

2) ace封裝了不同平台下的系統呼叫,也提供好幾種網路程式設計的模型.

然而,zeromq不是libevent,也不是ace,因為它的主要特性是:面向訊息進行通訊.所以,它提供的是比libevent,ace處在網路通訊中更高一層的元件.使用它,程式設計師不再需要上面提到的libevent,ace之類的庫需要關心的東西,程式設計師如果要使用zeromq,只需要做如下的事情:

1) 告知所使用的patten,比如request-reply,pub-sub,push-pull等(下面會詳細解釋這個pattern).

2) 告知是用於機器之間,還是程序之間,執行緒之間的通訊.

然後,將所需要傳送的資料封裝到zeromq自帶的msg結構體中傳送出去,使用者自己關心如何序列化/反序列化這些資料,然後如何處理這些資料就是使用者的事情了.這樣看上來,使用者要關注的事情」高」了一層,大部分的精力都可以放在業務邏輯之上了.簡而言之,它讓使用者的精力放在了通訊模式和業務邏輯上,而不是更下面一層的網路層上.下面解釋一下zeromq常用的幾種網路pattern:

1) request-reply

就是一般的c/s架構中,client與server之間一問一答的通訊模式,比如最經典的echo服務.需要注意的是,client傳送乙個request,server必須有乙個回應.

server端作為publish端,而任何連線到服務端的client都會成為subscribe端.也就是說,server端會把當前的所有需要publish出去的訊息全部傳送到當前連線上去的client上.3) push-pull

server端作為push端,而client端作為pull端.如果有多個client端同時連線到這個server,則伺服器會在內部做乙個負載均衡,採用平均分配的演算法,將所有的訊息均衡發布到client端上.看上去,很稀鬆平常?接下來亮點真的來了.

伺服器架構 ZeroMQ 的模式

在需要並行化處理資料的時候,採用訊息佇列通訊的方式來協作,比採用共享狀態的方式要好的多。erlang go 都使用這一手段來讓並行任務之間協同工作。最近讀完了 zeromq 的 guide。寫的很不錯。前幾年一直有做類似的工作,但是自己總結的不好。而 zeromq 把訊息通訊方面的模式總結的很不錯。...

靜態方法沒有多型表現!原理說的很透徹!!

class super string name class sub extends super string name class differ 輸出結果為 晚上好,子類 晚上好 是父類方法的輸出,而 子類 是子類方法的輸出,這是由於greeting是乙個靜態方法,它沒有執行時多型的特性,它的呼叫在...

MVC 模式 很經典的時鐘例項

mvc模式是 model view controller 的縮寫,中文翻譯為 模式 檢視 控制器 mvc應用程式總是由這三個部分組成。event 事件 導致controller改變model或view,或者同時改變兩者。只要controller改變了models的資料或者屬性,所有依賴的view都會...