當我們用socket進行程式設計的時候,細節上都是選擇乙個af_local
,af_inet
再根據相應的型別填充位址,其實根據通訊需求,有幾種簡單的服務模型可供選用,掌握了這些框架再結合socket高度的抽象,可以為我們編寫簡單的伺服器程式提供指導
使用者請求服務需要排隊,伺服器一次只能服務乙個客戶,服務完才能對下乙個客戶進行服務。atm機就是這個1vs1模型。udp伺服器也經常使用這個模型
//模型偽**
main
}
多程序只是放listen到請求的時候,不是在原程序中處理請求,而是在子程序中處理,父程序繼續偵聽請求。多程序的好處父程序不必等待子程序處理完乙個請求才能獲取下乙個請求,而是只要有請求就fork乙個子程序處理,這樣就可以實現併發伺服器。多程序併發的更實際的方案是使用程序池來實現。
//模型偽**
main
exit(0);}}
}
使用多執行緒實現併發和多程序類似,但是建立乙個執行緒的開銷比建立乙個程序小得多,需要注意的是使用多執行緒需要做好對臨界資源的保護。實際操作經常使用執行緒池來實現多執行緒併發服務。
//模型偽**
void* communicate(void* arg)
}main
}}
i/o多路復用實現併發服務我已經在linux i/o多路復用一文中舉出了詳細的例子,其實質就是將udp伺服器的迴圈模型用在tcp上。
//模型偽**
main //監控i/o有資料流入
monitor_set_2[i]= //監控i/o變得可寫
while(1)else
}else}}
}}
伺服器模型
伺服器模型 1 迴圈伺服器模型 tcp 迴圈伺服器 udp 迴圈伺服器 2 併發伺服器 tcp 併發伺服器 父子程序實現併發伺服器 父親程序 接收請求。accept 兒子程序 處理具體客戶端需求。send recv 注意點 殭屍程序,父親活著,兒子死亡,父親沒有為兒子程序收屍,會產生殭屍程序。避免殭...
伺服器模型
在使用socket進行網路程式設計時,首先要選擇乙個合適的伺服器模型是很重要的。在網路程式裡,通常都是乙個伺服器服務多個客戶機,為了處理多個客戶機的請求,伺服器端的程式有不同的處理方式。迭代模型算是最早期的伺服器模型,其核心實現是每來乙個使用者,然後為這個使用者服務到底,過程中不接受任何新的使用者請...
Linux網路程式設計 伺服器模型
學習過 軟體工程 吧.軟體工程可是每乙個程式 員 必修 的課程啊.如果你沒有學習過,建議你去看一看.在這一章裡面,我們一起來從軟體工程的角度學習網路程式設計的思想.在我們寫程式之前,我們都 應該從軟體工程的角度規劃好我們的軟體,這樣我們開發軟體的效率才會高.在網路程式裡面,一般的來說都是許多客戶機對...