Unix Socket - 客戶端伺服器模型



大多數網路應用程式使用客戶端-伺服器架構,它指的是兩個程序或兩個應用程式相互通訊以交換某些資訊。這兩個程序之一充當客戶端程序,另一個程序充當伺服器。

客戶端程序

這是一個通常發出資訊請求的程序。獲取響應後,此程序可能會終止或進行其他處理。

例如,Internet 瀏覽器充當客戶端應用程式,它向 Web 伺服器傳送請求以獲取一個 HTML 網頁。

伺服器程序

這是一個接收來自客戶端請求的程序。在收到來自客戶端的請求後,此程序將執行所需的處理,收集所需的資訊並將其傳送給請求者客戶端。完成後,它準備好為另一個客戶端提供服務。伺服器程序始終處於警報狀態並準備為傳入請求提供服務。

例如 - Web 伺服器一直等待來自 Internet 瀏覽器的請求,並且一旦它收到來自瀏覽器的任何請求,它就會獲取請求的 HTML 頁面並將其傳送回該瀏覽器。

請注意,客戶端需要知道伺服器的地址,但伺服器在連線建立之前不需要知道客戶端的地址甚至存在。一旦連線建立,雙方都可以傳送和接收資訊。

2 層和 3 層架構

客戶端-伺服器架構有兩種型別 -

  • 2 層架構 - 在此架構中,客戶端直接與伺服器互動。這種型別的架構可能存在一些安全漏洞和效能問題。Internet Explorer 和 Web 伺服器使用兩層架構。此處使用安全套接字層 (SSL) 解決安全問題。

  • 3 層架構 - 在此架構中,另一個軟體位於客戶端和伺服器之間。此中間軟體稱為“中介軟體”。中介軟體用於執行所有安全檢查和負載均衡(在負載過重的情況下)。中介軟體接收來自客戶端的所有請求,並在執行必要的身份驗證後,將該請求傳遞給伺服器。然後伺服器執行所需的處理並將響應傳送回中介軟體,最後中介軟體將此響應傳遞迴客戶端。如果要實現 3 層架構,則可以在 Web 伺服器和 Web 瀏覽器之間保留任何中介軟體,例如 Web Logic 或 WebSphere 軟體。

伺服器型別

您可以擁有兩種型別的伺服器 -

  • 迭代伺服器 - 這是伺服器最簡單的形式,其中伺服器程序為一個客戶端提供服務,並在完成第一個請求後,接收來自另一個客戶端的請求。同時,另一個客戶端保持等待狀態。

  • 併發伺服器 - 這種型別的伺服器執行多個併發程序以同時處理許多請求,因為一個程序可能需要更長時間,而另一個客戶端無法等待那麼長時間。在 Unix 下編寫併發伺服器最簡單的方法是fork一個子程序來分別處理每個客戶端。

如何建立客戶端

建立連線的系統呼叫對於客戶端和伺服器來說略有不同,但都涉及套接字的基本構造。這兩個程序都建立自己的套接字。

在客戶端建立套接字所涉及的步驟如下 -

  • 使用socket()系統呼叫建立套接字。

  • 使用connect()系統呼叫將套接字連線到伺服器的地址。

  • 傳送和接收資料。有多種方法可以做到這一點,但最簡單的方法是使用read()write()系統呼叫。

如何建立伺服器

在伺服器端建立套接字所涉及的步驟如下 -

  • 使用socket()系統呼叫建立套接字。

  • 使用bind()系統呼叫將套接字繫結到地址。對於 Internet 上的伺服器套接字,地址由主機上的埠號組成。

  • 使用listen()系統呼叫偵聽連線。

  • 使用accept()系統呼叫接受連線。此呼叫通常會阻塞連線,直到客戶端與伺服器連線。

  • 使用read()write()系統呼叫傳送和接收資料。

客戶端和伺服器互動

以下是顯示完整客戶端和伺服器互動的圖表 -

Socket Client Server
廣告