天天看點

nanomsg筆記--通信協定與傳輸協定

  花了一段時間吧nanomsg的源碼給編譯了一遍,同時對裡面的主要的協定進行了調試。

  由于該項目是c寫的,發現可讀性太差了,調試了很多遍仍然模模糊糊的。再加上該項目中的代碼量也不低,是以這個練習是我吸收的最差的一個。  決定不能再在上面耗着了,将目前能夠了解的,結合網友的經驗帖進行記錄一下。

   注意,這裡的傳輸協定不是規範的叫法,也并非tcp/ip協定的那個傳輸層協定,而是屬于應用層的一種協定。我為了友善記憶就暫稱之為傳輸協定。

   通信協定,我這裡指的是 通信雙方的行為表現。

1.通信協定之bus總線通信:

1.1圖解:

nanomsg筆記--通信協定與傳輸協定

1.2實作:

nanomsg筆記--通信協定與傳輸協定
nanomsg筆記--通信協定與傳輸協定

1.3注釋:

  綁定在某一個位址(總線,bus)上的節點,可以收到其它所有連接配接在該總線的節點發送的資訊;同時,它發送的資訊也可以被所有的其它節點接收到。

   隻是連接配接在某一個位址上的兩個節點或者多個節點,彼此的消息是不可達的。  即上圖中的虛線部分是不可達的。 

   它内部的實作通過priolist提供消息通信的實作;

2.通信協定之pipeline單向管道推送協定:

2.1圖解:

nanomsg筆記--通信協定與傳輸協定
nanomsg筆記--通信協定與傳輸協定

2.2實作:

nanomsg筆記--通信協定與傳輸協定
nanomsg筆記--通信協定與傳輸協定

2.3注釋:

   它是基于socket實作的,但是不必像socket那樣,服務端綁定後,用戶端連接配接。

   可以用戶端先連接配接,然後服務端再綁定。 它是通過 狀态機+定時器+線程池事件機制自動完成的這個步驟;

   内部是通過:lb負載+priolist實作;

3.通信協定之pair端對端通信模型:

3.1圖解:

nanomsg筆記--通信協定與傳輸協定

3.2注釋:

  它跟 socket很像,socket也是端對端的通信。但是針對同一個位址,可以有多個連接配接進行連接配接。

   pair端對端通信協定,限定了一個位址的兩端,隻能為1對1的關系。

   其内部是通過exel + pipe的方式完成;

4.通信協定之pub/sub消息廣播模式:

4.1圖解:

nanomsg筆記--通信協定與傳輸協定
nanomsg筆記--通信協定與傳輸協定

4.2實作:

nanomsg筆記--通信協定與傳輸協定
nanomsg筆記--通信協定與傳輸協定

4.3注釋:

   它與pipeline通信模型有些相似,最大的不同在于,它是 單生産者單消費者的。

   它是基于 list,priolist實作;

5.通信模型之req/rep請求響應模型:

5.1圖解:

   略,與pipeline差不多,不過它有操作時序的要求。 

5.2實作:

nanomsg筆記--通信協定與傳輸協定

5.3注釋:

   與伺服器容器很像。  用戶端發起請求,服務端傳回響應。

   服務端不可能事先給用戶端發送響應。 

6.通信協定之surveyor/respondent調查者模式:

6.1圖解:

nanomsg筆記--通信協定與傳輸協定

6.2實作:

nanomsg筆記--通信協定與傳輸協定

6.3注釋:

  它剛好與 請求響應模式有一點對立的意思; 它的首次發送資訊必須由 服務端發起;

  傳輸協定我在這裡的了解是 資料所在的目的位置,或者資料傳輸的途徑。

7.傳輸協定之inproc程序間資料傳輸:

7.1實作:

    在windows中,它是通過共享記憶體完成的。  該記憶體封裝在 ctx上下文中,在傳輸的過程中從上下文中拷貝至目标記憶體進行實作。 

    在linux中,系統提供該協定的支援。 

8.傳輸協定之ipc線程間資料傳輸:

8.1實作:

      在windows中,通過WriteFile(), ReadFile()的方式,完成資料的傳輸;

      在linux中,系統提供支援;

9.傳輸協定之tcp基于ip的傳輸協定:

9.1實作:

       通過套接字api實作通信過程;

10.傳輸協定之ws傳輸協定:

10.1實作:

        通過socket套接字api實作通信;

        由浏覽器提供支援的socket;它能引導一個http協定更新成 websocket協定,俺認為這是它與socket最大的不同。 

總結:

     由于使用的是c語言,這對我調式和了解代碼增加相當的難度,尤其是多個的結構體的使用,使我了解起來造成了極大困難;

     這次練習的本意的是熟悉消息隊列,但是沒有達到效果。 

     很多東西用面向對象的思維,其實更容易了解。 不過據說nanomsg使用c實作使得它的效率提高了,相較于zeromq有了一些優化。 

     協定,虛拟機  本質上 就是個 狀态機。 

資源:

        ​​nanomsg的位址​​;