定義:是指兩個來自相同發起者的請求在伺服器端是否具備上下文關係,具有上下文關係則為有狀態伺服器,沒有則為無狀態伺服器;
狀態化請求
,那麼伺服器端一般都要儲存請求的相關資訊,每個請求可以預設地使用以前的請求資訊,傳送的資訊量較少;
無狀態請求
,伺服器端所能夠處理的過程必須全部來自於請求所攜帶的資訊,以及其他伺服器端自身所儲存的、並且可以被所有請求所使用的公共資訊,傳送的資訊量較大。
web伺服器屬於無狀態伺服器。每次http請求(請求響應模式)和以前都沒有啥關係,只是獲取目標uri。得到目標內容之後,這次連線就被殺死,沒有任何痕跡。在後來的發展程序中,逐漸在無狀態化的過程中,加入狀態化的資訊,比如cookie。服務端在響應客戶端的請求的時候,會向客戶端推送乙個cookie,這個cookie記錄服務端上面的一些資訊。客戶端在後續的請求中,可以攜帶這個cookie,服務端可以根據這個cookie判斷這個請求的上下文關係。cookie的存在,是無狀態化向狀態化的乙個過渡手段,他通過外部擴充套件手段,cookie來維護上下文關係,健壯性更強,重啟客戶端服務端,大不了重新傳送資訊,一般情況不用恢復上下文;
msn、網路遊戲等伺服器屬於狀態化的伺服器。他在服務端維護每個連線的狀態資訊,服務端在接收到每個連線的傳送的請求時,可以從本地儲存的資訊來重現上下文關係。這樣,客戶端可以很容易使用預設的資訊,服務端也可以很容易地進行狀態管理。比如說,當乙個使用者登入後,服務端可以根據使用者名稱獲取他的生日等先前的註冊資訊;而且在後續的處理中,服務端也很容易找到這個使用者的歷史資訊。
狀態化伺服器在功能實現方面具有更加強大的優勢,但由於他需要維護大量的資訊和狀態,在效能方面要稍遜於無狀態伺服器。無狀態伺服器在處理簡單服務方面有優勢,但複雜功能方面有很多弊端,比如,用無狀態伺服器來實現即時通訊伺服器,將會是場惡夢。
狀態伺服器可以接受無狀態請求,完成相關的處理。
池,狀態與無狀態,伺服器上下文
池 pooling 池化的伺服器物件提前被構造和初如化 能限制例項的個數 最小值,最大值 例項能被多個會話共享,用來支援更多使用者的請求 當返回池中的時候例項必須復原 池化的服務可以讓web應用程式在使用者之間共享 非池化的物件每次重新構造和初始化,並在返回伺服器時析構 能限制最大例項數 每個會話使...
無狀態服務 VS 有狀態服務
對伺服器程式來說,究竟是有狀態服務,還是無狀態服務,其判斷依舊是指兩個來自相同發起者的請求在伺服器端是否具備上下文關係。如果是狀態化請求,那麼伺服器端一般都要儲存請求的相關資訊,每個請求可以預設地使用以前的請求資訊。而對於無狀態請求,伺服器端所能夠處理的過程必須全部來自於請求所攜帶的資訊,以及其他伺...
無狀態服務VS有狀態服務
在網易蜂巢的服務管理中存在兩種服務 無狀態服務和有狀態服務。無狀態服務 stateless service 是指該服務執行的例項不會在本地儲存需要持久化的資料,並且多個例項對於同乙個請求響應的結果是完全一致的。這類服務在網易蜂巢雲平台建立後,借助k8s內部的負載均衡,當訪問該服務的請求到達服務一端後...