NET應用程式的大部分使用的客戶端伺服器架構。這些術語指的是兩個進程或兩個應用程式在相互通信和交換一些資訊。兩個過程作為一個客戶端進程,並另一個進程作為伺服器。
客戶端進程:
這是一個過程,這通常使得資訊請求。得到回應後,這一過程可能會終止或可能會做一些其他的處理。
例如: 互聯網流覽器作為一個客戶端應用程式,Web伺服器發送一個請求到得到一個HTML網頁。
伺服器進程:
它接受一個來自客戶端的請求的過程。獲得來自客戶端的請求後會處理所需的收集所需的資訊,將其發送到請求客戶端。一旦這樣做完成後,就又變成準備為另一個客戶端。伺服器進程始終等待準備用於處理傳入請求。
實例: Web伺服器一直等待來自互聯網流覽器的請求,並儘快得到任何請求從流覽器,它拿起一個請求的HTML頁面,並把它發送回該流覽器。
注意,客戶端需要知道的存在伺服器的地址,但是伺服器並不需要在建立的連接之前知道客戶端的地址。一旦建立連接後,雙方都可以發送和接收資訊。
2層和3層架構:
有兩種類型的客戶端伺服器架構:
-
兩層構架: 在這種架構中,客戶端直接與伺服器進行交互。這種類型的架構可能有一些安全漏洞和性能問題。 IE流覽器和Web伺服器的兩層架構。這裏的安全問題都解決了使用安全套接字層(SSL)。
-
三層架構:在這個架構中,多了一個軟體位於客戶端和服務器之間。這中間的軟體被稱為中間件。中間件被用來執行所有的安全檢查和重負載情況下的負載平衡。中間件需要從客戶端的所有請求,並做必要的驗證後,通過向伺服器發出請求。然後,伺服器沒有所需的處理和發送回應回中間件,中間件終於通過這個回應返回給客戶端。如果想實現一個3層架構,那麼可以使用如Web Logic或WebSphere軟體在Web伺服器和Web流覽器之間的任何中間件。
伺服器類型:
有兩種類型的伺服器上,可以有:
-
迭代伺服器: 這是最簡單形式的伺服器的服務進程的客戶端和第一個請求,然後完成後,需要從其他客戶機的請求。同時,另一個客戶端一直等待。
-
併發伺服器:這種類型的伺服器運行多個進程併發服務請求一次。因為一個進程可能需要更長的時間,但其他客戶機又不能等太久。 Unix下寫一個併發伺服器的最簡單的方法是fork一個子進程來分開處理每個客戶端。
如何創建客戶端:
系統調用有所不同的客戶端和服務器建立連接,但兩者套接字涉及的基本構造。這兩個過程分別建立自己的套接字。
在客戶端建立套接字所涉及的步驟如下:
-
創建一個socket可使用socket()的系統調用
-
套接字連接的伺服器地址使用connect()系統調用。
-
發送和接收數據。做到這一點的方法有許多,但最簡單的方法是使用 read() 和 write()
如何創建伺服器:
在伺服器端建立套接字所涉及的步驟如下:
-
創建一個socket可使用socket()的系統調用
-
使用bind()系統調用套接字綁定到一個地址。對於互聯網上的伺服器套接字,地址包括主機的端口號。
-
連接監聽listen()系統調用
-
接受連接使用 accept()系統調用。此調用通常會阻塞,直到客戶端與伺服器連接。
-
發送和接收數據 read() 和write() 系統調用.
客戶端和服務器的交互:
以下是完整的客戶端和服務器的交互圖:
