Socket 客戶端服務器模式 架構
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() 係統調用.
客戶端和服務器的交互:
以下是完整的客戶端和服務器的交互圖: