概念性的伺服器演算法:建立乙個
socket
,將它繫結到乙個熟知的
port
上,並期望在這個
port
上接收請求,接著進入無限
loop
,在迴圈中,伺服器接受來自
client
的下乙個請求,處理請求,結構應答,然後將這個應答發回給客戶。
iterative server and concurrent server : iterative server
是在乙個時刻只處理一
個請求的一種伺服器實現。
concurrent server
是在乙個時刻可以處理多個請求的一種伺服器。一般來說,併發伺服器更難設計和構建,其最終**頁更複雜並且難以修改。
面對連線和無連線伺服器:區別就是選擇
tcp還是
udp的問題。
因為已經選擇了
tcp的伺服器,所以暫時不介紹
udp伺服器問題。
tcp伺服器有點是容易程式設計,可靠性在協議上得到保證。
面向連線伺服器缺點:要求對每個連線都有乙個單獨的
socket
,而無連線的設計則允許從乙個
socket
上與多個主機通訊。最大缺點是
tcp在空閒連線上根本不傳送任何分組,比如在資源的使用上,伺服器擁有分配給改連線的資料介面,包括緩衝空間,並且這些資源不能被重新分配。
四種伺服器型別:
1.迴圈的無連線
2.迴圈的面向連線
3.併發的無連線
4.併發的面向連線。我們選擇的是第四種。
request processing time
為伺服器處理單個鼓勵的請求所花的時間。
observed response time
為客戶傳送請求至伺服器響應直接的全部
delay.
很明顯,
ort不可能小於
rpt。若
n代表請求佇列的平均長度,對剛剛的請求來說,它的觀測響應時間大約是
n/2 + 1
個伺服器請求處理時間。
乙個迴圈伺服器是否夠用?假設乙個伺服器設計能力可以處理
k個客戶,每個客戶每秒傳送
r個請求,則此伺服器的請求處理時間必須小於每請求
1/kr秒。用
inaddr_any
繫結熟知埠:
bind
為了某個套接字知名某個鏈結端點,它使用了結構
sockaddr_in
,該結構中含有
ip位址和協議埠號。
bind
不能只指明協議埠號而不指明
ip位址。但是,如果選擇指明的
ip位址,那該主機只能有乙個
ip位址和伺服器相連線。然而路由器或者多網絡卡機有多個
ip,伺服器就沒辦法得到其他
ip的內容了。為了解決這個問題,
socket
定義了特殊常量
inaddr_any
,它可以代替
ip位址,它指明了通配位址
(wildcard address)
,它與該主機的任何乙個
ip位址都匹配。
軟體設計中的演算法
說到演算法這一塊,有大量的知識等著我們去了解,去學習,去 定義 演算法是對特定問題求解步驟的一種描述,它是指令的有序序列,其中每一條指令表示乙個或多個操作。特性 1 有窮性 finiteness 演算法的有窮性是指演算法必須能在執行有限個步驟之後終止 2 確切性 definiteness 演算法的每...
軟體設計的原則問題
軟體重構問題 1.在完成乙個階段的開發工作後,需要整理自己 進行重構.2.遇見重複出現的情況,不要做重複的事情,需要整理自己 不要做重複的事情,不然維護所耗的時間可能更大.設計原則 單一職責原則 乙個物件只做與之相關單一職責 開放 封閉原則 對擴充套件開發,對修改封閉 黎克特制代換原則 只有當子類可...
關於軟體設計中遇到的問題
在最近開發乙個專案的過程中遇到的一些純軟體的問題 1 整個軟體的功能劃分在已開始是明確的,但是隨著程式的編寫以及一些結構的調整,各個模組之間的聯絡越來越緊密,特別是事件相關的邏輯,地圖分析 實時事件報警 歷史事件查詢 事件回放等,都要用到事件,都要讀取事件。導致了這幾個模組之間的強耦合。2 有一些類...