.NET下可複用的TCP通訊層實現之TCP組件

來源:互聯網
上載者:User
    2006年已經來臨,回首剛走過的2005,心中感慨萬千。在人生和生活的目標上,有了清晰明確的定位,終於知道了自己喜歡什麼樣的生活,喜歡什麼樣的生活;在技術上,成熟了不少,眼界也開闊的不少,從物件導向到組件、從.Net到J2EE、從微軟到開源,頗有收穫。特別值得一提的是,認識了Rod Johnson這個大牛人,也終於在自己的項目中正式使用Spring.net架構來開發了,這確實是一個優秀的架構。而在已經到來的2006年,我有一個主要目標就是B/S應用開發,來填補自己在企業級開發上的另一半空白。

  以前就很想將自己在Tcp通訊層的開發心得、經驗共用出來,但一直沒有實現,究其原因,還是自己太懶了。今天終於找到一個時機,寫下這篇文章,也算是對2005年的另一種形式的回憶吧。

  絕大多數C/S(包括多層)結構的系統中,終端與伺服器的通訊都是通過Tcp進行的(使用Udp的也有一些,但是其相對於Tcp簡單許多,所以不在這裡的討論之列)。通常,這樣的C/S系統都需要處理極大的並發,也就是說隨時都可能有成千上萬個使用者線上,並且每分鐘都可能有數以百計的使用者上線/下線。由於每個使用者都與伺服器存在著一個Tcp串連,如何管理所有這些串連,並使我們的Tcp通訊層穩定高效地工作,是我開發的這個“TcpTcp通訊層”設計實現的主要目標。

  自從2004年9月開始至今,我就一直負責某C/S系統的伺服器端的架構設計,並負責整個通訊層的實現,在探索的過程中,逐漸形成了一套可複用的“Tcp通訊層架構”(“架構”這個詞真的蠻嚇人,呵呵),其位於EnterpriseServerBase類庫的EnterpriseServerBase.Network命名空間中。現將我在通訊層這一塊的設計/開發經驗記錄於此,以便日後回顧。也期大家多多賜教。

  我期望的“Tcp通訊層”並不只是能接受串連、管理串連、轉寄使用者請求這麼簡單,為了構建一個高度可複用的、靈活的、可接插的Tcp通訊層,需要定義很多的規則、介面、契約,這需要做很多的工作。“Tcp通訊層”決不僅僅只是Tcp協議通訊,由於通訊與訊息聯絡緊密,不可避免的需要將“通訊的訊息”納入到我們的分析中來,比如,基於Tcp傳輸的特性,我們可能需要對接收到的訊息進行分裂、重組等(後文中會解釋為什麼、以及如何做)。請允許我在這裡澄清一下,如果只是解決“僅僅”的Tcp通訊問題,我只需要介紹Tcp組件就可以了,但是如果要解決“整個Tcp通訊層”的問題,並使之可高度複用,那就需要介紹很多額外的東西,比如,上面提到的“訊息”,以及“訊息”所涉及的通訊協定。

  在我們應用的通訊層中,存在以Tcp組件為核心的多個組件,這些組件相互協作,以構建/實現高度可複用的Tcp通訊層。這些組件之間的關係簡單圖示如下:


  我先解釋一下上圖。當網路(Tcp)組件從某個Tcp串連上接收到一個請求時,會將請求轉寄給訊息指派器,訊息指派器通過IDataStreamHelper組件擷取請求訊息的類型,然後根據此類型要求處理器工廠建立對應類型的要求處理常式,要求處理常式處理請求並返回結果。接下來再由網路組件把結果返回給終端使用者。在訊息指派器進行請求訊息指派之前,可能涉及一系列的操作,像訊息加密/解密、訊息分裂/重組、訊息驗證等。而且,根據不同的應用,可能有其它的訊息轉換要求,而且這些操作可能是多樣化的,為了滿足這種多樣性和可接插性,這就需要訊息指派器提供一個插入點,讓我們可以隨心所欲地插入自訂的對請求/回複訊息的預先處理和後處理。

  上圖中訊息指派器中可接插的操作除了訊息分裂器(使用實線框)是必須的,訊息加密器和訊息驗證器(使用虛線框)是可選的,應根據你應用的實際情況加以決定是否使用。關於這幾個典型的可接插的組件的功能作用會在後文中介紹。在繼續介紹Tcp組件的實現之前,有必要先提一下IDataStreamHelper介面的作用,IDataStreamHelper介面用於抽象我們實際的通訊協定,並能從任何一請求/回複訊息中提取關於本條訊息的中繼資料,比如,訊息的長度、類型等資訊。具體的應用必鬚根據自己的訊息協議來實現IDataStreamHelper介面。關於該介面的定義也在後文中給出。

  關於上圖,需要提醒的是,整個訊息的流動是由Tcp組件驅動的!這篇文章以Tcp組件和訊息指派器組件為索引來組織整個可複用的Tcp通訊層的實現。首先,我們來深入到Tcp組件的具體實現中去。

[1] [2] [3] [4] [5] [6] 下一頁  



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。