socket通信---併發服務器圖解

  

    當服務器處理一個客戶請求可能需要相當長一段時間的時候,使用迭代服務器模式(即整個服務器可能被耽擱客戶長期佔用)是會影響系統性能的。而處理併發連接的服務器可以稱爲併發服務器。

   併發服務器的一個簡單操作是fork一個子進程來服務多個客戶。當一個連接建立時,用於阻塞進程的aceept返回,服務器接着調用fork來創建一個子進程,該子進程通過已連接套接口connfd服務客戶;而父進程就可以通過監聽套接口來等待另外一個連接,同時該關閉已連接套接口。

   如下是具體連接過程:

(1)服務器阻塞於accept調用且來自客戶的連接請求到達時的客戶端與服務器的狀態。

(2)從accept返回後,連接已經在內核中註冊,並且新的套接口connfd被創建。這是一個已建起連接的套接口,可以進行數據的讀寫。

(3)併發服務器在調用fork之後,listenfd和connfd這兩個描述字在父進程以及子進程之間共享(實際爲其中一份爲copy),各自的引用計數爲變成2.

(4)接下來是由父進程關閉已連接套接口(connfd),由子進程關閉監聽套接口(listenfd)。進行這個操作之後,那麼就可以讓子進程來處理與客戶的連接,而父進程可以在監聽套接口上再次調用accept來處理下一個客戶的連接。

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章