C/S模型
C/S模型概述
C/S(客戶端/服務(wù)器)模型,是常用的服務(wù)器模型岩调,包括現(xiàn)在說的B/S(瀏覽器/客戶端)模型巷燥,都是對C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)。 TCP/IP協(xié)議在設(shè)計和實現(xiàn)上并沒有客戶端和服務(wù)器的概念号枕,在通信過程中所有服務(wù)器都是對等的缰揪。但由于資源被數(shù)據(jù)提供者所壟斷,于是產(chǎn)生了C/S模型:所有客戶端都通過服務(wù)器獲取所需資源葱淳。模型如下圖1所示:
C/S模型的邏輯流程
C/S模型的TCP服務(wù)器與TCP客戶端工作流程如下圖2所示
- 服務(wù)器啟動后創(chuàng)建一個(或多個)監(jiān)聽socket钝腺,并bind到服務(wù)器感興趣的端口上。
- 調(diào)用listen等待客戶連接赞厕。
- 服務(wù)器穩(wěn)定后拍屑,客戶端調(diào)用connect主動向服務(wù)器發(fā)起連接。
- 服務(wù)器監(jiān)聽客戶請求(客戶連接請求是隨機(jī)到達(dá)的異步事件坑傅,服務(wù)器需要某種IO模型來監(jiān)聽事件。IO模型有很多種喷斋,以IO復(fù)用技術(shù)之一的select系統(tǒng)調(diào)用為例)唁毒。
- 當(dāng)監(jiān)聽到連接請求后,服務(wù)器accept并分配一個邏輯單元為新的連接服務(wù)星爪。(邏輯單元可以是新創(chuàng)建的子進(jìn)程子線程或者其他浆西,以fork子進(jìn)程為例。)
- 邏輯單元讀取客戶請求處理請求并將結(jié)果返回給客戶顽腾。
- 客戶收到結(jié)果可以繼續(xù)發(fā)送請求也可以關(guān)閉連接近零。(如果客戶端關(guān)閉連接,服務(wù)器則被動關(guān)閉連接抄肖。雙方通信結(jié)束久信。注意:服務(wù)器在處理一個請求的同時,也會繼續(xù)監(jiān)聽客戶其他請求)
C/S模型的分析
- 優(yōu)點:C/S模型適合資源集中的場合漓摩,且實現(xiàn)簡單裙士。
- 缺點:是服務(wù)器為通信中心,訪問量過大時管毙,可能導(dǎo)致所有客戶得到很慢的響應(yīng)腿椎。
P2P模型
P2P模型概述
P2P(Peer to Perr, 點對點)模型,摒棄以服務(wù)器為中心的格局夭咬,讓所有主機(jī)重歸對等啃炸,使得每臺機(jī)器在消耗服務(wù)的同時也給別人提供服務(wù),云計算機(jī)集群可以看作P2P模型的一個典范卓舵。從編程角度南用,P2P可以看作C/S的擴(kuò)展:每臺主機(jī)即是客戶端,又是服務(wù)器。P2P模型如下圖3所示
P2P分析
缺點:用戶之間傳輸?shù)恼埱筮^多時训枢,網(wǎng)絡(luò)負(fù)載加重托修,同時主機(jī)直接很難互相發(fā)現(xiàn)。所以實際P2P模型通常帶有一個專門的發(fā)現(xiàn)服務(wù)器恒界,用于查找服務(wù)(甚至可以提供內(nèi)容服務(wù))睦刃,使得每個客戶都盡快地找到自己所需的資源。下圖4為帶發(fā)現(xiàn)服務(wù)器的P2P模型
注(本文內(nèi)容參考 Linux高性能服務(wù)器編程——第八章 游雙著)