伺服器|用戶端|網路
在網路編程中(同樣在其它形式的通訊中,例如資料庫編程),使用通訊端的應用程式也被分為兩類--用戶端程式和伺服器程式。你可能對"用戶端/伺服器編程"術語比較熟悉,儘管這個術語的準確意思你不一定清楚。下面的範例就是討論這個主題。
1、 用戶端/伺服器範型
用戶端/伺服器範型把軟體分為兩類--用戶端程式和伺服器程式。用戶端軟體啟動一個串連並發送請求,而伺服器軟體監聽串連並處理請求。在UDP編程環境中,沒有建立實際的串連,並且UDP應用程式可以在相同的通訊端上建立並接收請求。在TCP環境中,兩台電腦之間建立了串連,用戶端/伺服器範型是相對應的。
當軟體作為用戶端或者伺服器的時候,它嚴格地定義了角色以更容易適應我們所熟悉的思維模型。軟體要麼啟動請求,要麼處理請求。在兩種角色之間切換使系統更加複雜。即使允許切換,在某個特定的時刻軟體程式也只能是用戶端,而另一個必須是伺服器。如果兩個同時是用戶端,就沒有伺服器處理請求了。
用戶端/伺服器範型是一個重要的理論概念,它廣泛用於實際應用程式中。目前也有其它的通訊模型,例如對等(peer to peer)模型,在這種模型中每一方都可以啟動通訊。但是用戶端/伺服器概念是更加流行的選擇,因為它很簡單並且在多數網路編程中使用。
2、網路用戶端
網路用戶端啟動串連,通常處理網路事務。伺服器程式用於實現用戶端的請求--用戶端不用實現伺服器的請求。儘管用戶端處於控制地位,但是伺服器端仍然有一些功能。用戶端可以要求伺服器刪除本地檔案系統的所有檔案,但是伺服器並不是必須執行這個任務的。
網路用戶端使用雙方都同意的通訊標準(即網路通訊協定)與伺服器對話。例如HTTP用戶端使用的命令組就與郵件用戶端使用的不同,而且目的也完成不同。把HTTP串連到郵件伺服器,或郵件用戶端串連到HTTP伺服器,要麼會出現一個錯誤訊息,要麼出現一個用戶端不能理解的錯誤訊息。因為這個原因,作為協議規格的一部分,必須使用某個連接埠號碼,這樣用戶端才能定位服務器。Web伺服器通常運行在80連接埠上,而其它一些伺服器可能運行在非標準的連接埠上,URL的習慣是不列出連接埠的,它假定使用80連接埠。
3、網路伺服器
網路伺服器的角色是綁定某個特定的連接埠(用戶端使用它定位服務器),並且監聽新的串連。儘管用戶端是臨時的,並且只有在使用者選中的時候才運行,但是伺服器程式必須不間斷地運行(即使實際上沒有已串連的用戶端),期望某個用戶端在某個時刻需要該服務。伺服器程式通常作為資料自適應監視器進程引用,使用Unix用法。它持久的運行,而且一般在該伺服器程式的主機啟動時啟動。因此伺服器一直等待,直到某個用戶端建立到該伺服器連接埠的串連。有些伺服器程式在某個時刻只能處理單個串連,其它一些伺服器程式可以通過使用多線程同時處理多個串連。
當開始串連後,伺服器就服從用戶端。它等待用戶端發送請求,並且"忠實地"處理它們(可是伺服器可以響應錯誤資訊,特別是當請求違反某些重要地協議規則或有安全風險的時候)。某些協議(例如HTTP/1.0)通常在每個串連中只允許一個請求,而其它一些協議(例如POP3)支援一系列請求。伺服器可以通過發送響應或錯誤訊息應答用戶端的請求。學習新的網路通訊協定(編寫用戶端或伺服器)與學習一種新的語言相似,只是文法改變了。但是典型情況下,它的命令的數量更小,使事情更簡單。伺服器的行為一部分由協議決定,一部分由開發人員決定(某些命令是可選的,伺服器不一定支援)。