在講解dubbotcp端的設計時,先了解下一些類的關係圖。它們是如何組織在一起的,每個功能又是什麼,接著在進一步深入了解其內涵。
1、exchangers(交換器工具類) 用來建立tcp服務(bind)和建立客戶端連線(connect)輔助類
2、transporters(資料流傳輸工具類)用來建立tcp服務(bind)和建立客戶端連線(connect)輔助類,exchangers的底層內容依賴於transporters,並且transporters會根據spi擴充套件,來適配合適的tcp通訊框架,比如netty,mina等。
3、exchanger(交換器) 用來建立tcp鏈結,通過工具類exchangers完成,該介面是乙個spi擴充套件,目前唯一僅有就是headerexchanger。從名字的含義可以得到,該協議是具有自定義協議頭的交換器,所以取名headerexchanger。
4、transporter(資料傳輸層) 用來建立tcp連線,通過工具類transporters完成。它也是乙個spi擴充套件,比如nettytransporter,minatransporter。
5、exchangeclient (交換器客戶端),exchanger的connect()方法返回,即建立了tcp連線後,返回的客戶端,接著就是通過該客戶端與服務端通訊,例項有headerexchangeclient、lazyconnectexchangeclient、referencecountexchangeclient。之後分別講解這3個,exchangers工具類建立的連線客戶端是headerexchangeclient。
6、exchangeserver (交換器服務端端) exchanger的bind()方法返回,即服務端監聽的服務端例項,它監聽這某個具體的tcp埠。預設實現是headerexchangeserver。
7、remotingserver(遠端的tcp服務端),exchangeserver類也實現了該介面,代表其也是乙個遠端伺服器,具體的實現有nettyserver,由transporter的bind()方法返回,具體的transporter返回相應的遠端服務端。比如nettytransporter#bind()返回nettyserver。
8、client(tcp客戶端),exchangeclient類也實現了該介面,代表其也是乙個tcp客戶端,具體實現有nettyclient,由transporter的connect()方法返回,具體的transporter返回相應的tcp客戶端。比如nettytransporter#connect()返回nettyclient。
9、channel (通訊通道) ,每建立乙個tcp鏈結就相應建立乙個channel。比如netty建立連線後,就有乙個channel。這裡的channel指的是dubbo自己定義的乙個channel。它與netty的channel建立關聯,通過nettychannel類,框架操作的是nettychannel,而nettychannel內部持有乙個netty的channel物件。
10、headerexchangechannel(交換器channel,exchangechannel屬於交換器channel),它被headerexchangeclient客戶端所持有,客戶端就是通過headerexchangechannel進行通訊的,headerexchangechannel內部持有乙個具體的channel。
11、channelhandler (通道處理器) 用來處理建立連線、傳送請求、結束請求等操作的具體抽象。
12、channelhandlers(通道處理器工具類) 主要用來包裹封裝具體的channel,它的作用是通過訊息型別,根據dispatcher返回不同的
13、dispatcher(訊息派發器)
型別dispatcher
channelhandler
作用all
alldispatcher
allchannelhandler
所有的訊息型別全部通過業務執行緒池處理
connection
connectionordereddispatcher
connectionorderedchannelhandler
連線、斷開訊息單獨通過乙個執行緒池池來處理,其他的讀寫等訊息通過業務執行緒池處理
direct
directdispatcher
directchannelhandler
所有的訊息都通過io執行緒池處理,不放到業務執行緒池中
execution
executiondispatcher
executionchannelhandler
請求訊息在業務執行緒池處理,其他訊息在io執行緒池。
message
messageonlydispatcher
messageonlychannelhandler
請求和響應訊息在業務執行緒池處理,其他心跳,連線等訊息在io執行緒池處理
system.out.println("鏈結前");
channel channel = channelfuture.channel();
system.out.println("鏈結後");}}
結果符合預期,dubbo 也是通過服務底層公用一條tcp鏈結,多執行緒進行呼叫該鏈路channel。
15 網路七層
1.tcp面向連線 如打 要先撥號建立連線 udp是無連線的,即傳送資料之前不需要建立連線 2.tcp提供可靠的服務,也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達 udp盡最大努力交付,即不保證可靠交付 3.tcp通過校驗和,重傳控制,序號標識,滑動視窗 確認應答實現可靠傳...
20200529 網路七層協議
家裡桌子不是太穩,所以打字時經常造成螢幕跟著手晃,比較好的習慣是手抬起來,胳膊不碰桌面,這樣就不晃了。1 應用層 應用層是網路應用程式及其應用層協議儲存的層次。為應用程式提供服務。2 表示層 處理在兩個通訊系統中交換資訊的表示方式。3 會話層 負責維護兩個結點間會話連線的建立 管理和終止,以及資料交...
桌面虛擬化 之七網路設計
桌面虛擬化的網路設計涉及很多考慮因素,比如從內網訪問還遠端訪問,與loadbalancer的整合,防火牆,虛擬交換機,網路頻寬等很多方面。例項 假設乙個客戶需求大致如下 滿足使用者隨時隨地訪問虛擬桌面,無論是通過公司內網還是internet 設計需要符合公司的安全策略,比如保證通過internet訪...