C/S和B/S應用程式的本質區別

iDotNetSpace發表於2008-09-26
在Windows系統中,除驅動程式外,應用程式大概有如下幾類:
  •     單機程式(只考慮主體功能,程式更新和註冊等,也含網路通訊):WinForm,如:office、金山詞霸、防毒軟體等;控制檯程式;Windows服務等
  •     網路通訊伺服器:可以是控制檯、Windows服務、WinForm等多種形式;也可以是WinForm單機服務管理程式加上多個Windows服務的形式(如SqlServer等資料庫服務端)
  •     網路通訊客戶端:一般為WinForm形式,也有控制檯的,或者網路遊戲類的動畫形式
  •     點對點網路通訊程式,其實就是一個程式既有服務端又有客戶端功能,或者採用UDP協議通訊

    以上幾類應用程式絕大多數都有可單獨執行的exe,執行後產生一個或多個單獨的程式,也有依託於rundll32.exe等程式啟動的“可執行dll”程式(很多病毒木馬和監控客戶端屬於此類)。

    顯然,C/S程式中的服務端S和客戶端C分別屬於網路通訊伺服器和網路通訊客戶端類。而B/S呢?不是單機程式,只能屬於網路通訊程式,但服務端和客戶端都沒有單獨的exe,也就是說B/S並不是完整的程式,其客戶端(browser)是IE等瀏覽器,服務端是IIS(Internet Information Services 網路資訊服務平臺,java採用tomcat等平臺,本文只以IIS講述,下同)。瀏覽器就是一個完整的網路通訊客戶端了,一般都有單獨的exe,IIS是一個WinForm的服務和配置管理程式加上多個Windows服務的組合(可能有作業系統的“親密”支援),是一套完善的網路通訊伺服器。

    我們用Asp.net等語言寫的程式碼,編譯後會生成一個或多個dll,以及aspx、js、css、圖片等檔案,其中指令碼作為網路通訊客戶端的一部分,由瀏覽器解釋執行;dll在設定了虛擬目錄後動態載入到IIS,作為網路通訊伺服器的一部分,負責特定的業務處理。而瀏覽器和IIS間採用http頭+html體(或其它變種)的協議進行通訊,當瀏覽器向IIS發一個字串請求後,IIS根據aspx檔案中對字串的定義,提取控制元件值等資訊,分發給特定的dll,由我們編寫的dll進行業務處理,dll處理完後將新的控制元件值等資訊以函式返回值之類的形式返回給IIS,IIS再根據aspx中的定義處理成協議字串,回覆給瀏覽器。

    所以B/S實質上是C/S的,只不過我們通常只做了服務端的業務處理部分,編譯成dll交給IIS,客戶端基本沒做什麼。單獨的IIS也沒有意義,必須有dll作為外掛進行業務處理。

    B/S只能採用標準的http頭+html體(或其它變種)的通訊協議,而C/S更加靈活,可以採用任何標準協議和自定義協議,甚至可以是基於UDP的應用層協議。當我們自定義的協議形成一個體系時,服務端可以做一個通訊框架,甚至是通用的exe平臺,客戶端介面由伺服器取得,以後二次開發只需要做一個dll插入通用的伺服器平臺中即可。這樣就把C/S程式做成了B/S的形式。Wap就是和Web一樣的B/S類應用程式。

    寫了這麼多,發現C/S和B/S本質上是一樣的,可以相互轉化。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-464469/,如需轉載,請註明出處,否則將追究法律責任。

相關文章