伺服器軟體設計的演算法和問題

2022-08-27 13:33:09 字數 1582 閱讀 4238

概念性的伺服器演算法:建立乙個

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 有一些類...