伺服器設計技術有很多,按使用的協議來分有tcp伺服器和udp伺服器。按處理方式來分有迴圈伺服器和併發伺服器。
在網路程式裡面,一般來說都是許多客戶對應乙個伺服器,為了處理客戶的請求,對服務端的程式就提出了特殊的要求。
目前最常用的伺服器模型有:
·迴圈伺服器:伺服器在同一時刻只能響應乙個客戶端的請求
·併發伺服器:伺服器在同一時刻可以響應多個客戶端的請求
1.迴圈伺服器實現
1.1 udp迴圈伺服器的實現方法:
udp迴圈伺服器每次從套接字上讀取乙個客戶端的請求->處理->然後將結果返回給客戶機。
因為udp是非面向連線的,沒有乙個客戶端可以老是佔住服務端。只要處理過程不是死迴圈,伺服器對於每乙個客戶機的請求總是能夠滿足。
udp迴圈伺服器模型為:
socket(...);
bind(...);
while(1)
1.2 tcp迴圈伺服器的實現方法
tcp迴圈伺服器接受乙個客戶端的連線,然後處理,完成了這個客戶的所有請求後,斷開連線。tcp迴圈伺服器一次只能處理乙個客戶端的請求,只有在這個客戶的所有請求滿足後,伺服器才可以繼續後面的請求。如果有乙個客戶端佔住伺服器不放時,其它的客戶機都不能工作了,因此,tcp
伺服器一般很少用迴圈伺服器模型的。
tcp迴圈伺服器模型為:
socket(...);
bind(...);
listen(...);
while(1)
2 三種併發伺服器實現方法
乙個好的伺服器,一般都是併發伺服器。併發伺服器設計技術一般有:多程序伺服器、多執行緒伺服器、i/o復用伺服器等。
2.1 多程序併發伺服器
在linux環境下多程序的應用很多,其中最主要的就是網路/客戶伺服器。多程序伺服器是當客戶有請求時 ,伺服器用乙個子程序來處理客戶請求。父程序繼續等待其它客戶的請求。這種方法的優點是當客戶有請求時 ,伺服器能及時處理客戶 ,特別是在客戶伺服器互動系統中。對於乙個 tcp伺服器,客戶與伺服器的連線可能並不馬上關閉 ,可能會等到客戶提交某些資料後再關閉 ,這段時間伺服器端的程序會阻塞 ,所以這時作業系統可能排程其它客戶服務程序。比起迴圈伺服器大大提高了服務效能。
tcp多程序併發伺服器
tcp併發伺服器的思想是每乙個客戶機的請求並不由伺服器直接處理,而是由伺服器建立乙個子程序來處理。
socket(...);
bind(...);
listen(...);
while(1)
close(...);
}2.2多執行緒伺服器
多執行緒伺服器是對多程序的伺服器的改進 ,由於多程序伺服器在建立程序時要消耗較大的系統資源 ,所以用執行緒來取代程序 ,這樣服務處理程式可以較快的建立。據統計 ,建立執行緒與建立程序要快 10100 倍 ,所以又把執行緒稱為「輕量級」程序。執行緒與程序不同的是:乙個程序內的所有執行緒共享相同的全域性記憶體、全域性變數等資訊。這種機制又帶來了同步問題。以下是多執行緒伺服器模板:
socket(...);
bind(...);
listen(...);
while(1)
close(...);
}2.3 i/o復用伺服器
i/ o復用技術是為了解決程序或執行緒阻塞到某個 i/ o系統呼叫而出現的技術 ,使程序不阻塞於某個特定的i/ o系統呼叫。它也可用於併發伺服器的設計,常用函式select 或 poll來實現。
socket(...);
bind(...);
listen(...);
while(1)
以上都是tcp伺服器端的程式,tcp客戶端的程式可以通用:
socket(...);
connect(...);
listen(...);
process(...);
close(...);
併發伺服器設計
併發伺服器就是能夠同時處理多個客戶端請求的伺服器。併發伺服器可通過多程序或者多執行緒程式來實現,這裡採用多程序程式。include include include include include include include 定義了struct sockaddr in void main 繫結位址...
伺服器併發處理架構
網路伺服器如何處理併發請求的模型稱之為多工體系結構。1.inetd模式 在大部分unix作業系統中,預設的多工體系結構是inetd應用程式。通用的網路伺服器體系結構inetd分為兩個部分 主服務程序和客戶服務程序。主服務程序通常用於等待客戶端的連線請求。一旦客戶端發起乙個請求,主伺服器將建立連線,同...
網路併發伺服器設計
一 問題描述 tcp程式設計學習中,當開啟tcp server後,同時開啟乙個tcp client不執行。再開啟乙個tcp client傳送資料後。tcp server沒有響應,因為tcp server建立和第乙個tcp client的連線後,一直在等待它的資料 阻塞狀態 為了解決這個問題,我們需要...