狀態服務器與無狀態服務器(要點)

對服務器程序來說,究竟是有狀態服務,還是無狀態服務,其判斷依舊是指兩個來自相同發起者的請求在服務器端是否具備上下文關係。如果是狀態化請求,那麼服務器端一般都要保存請求的相關信息,每個請求可以默認地使用以前的請求信息。而對於無狀態請求,服務器端所能夠處理的過程必須全部來自於請求所攜帶的信息,以及其他服務器端自身所保存的、並且可以被所有請求所使用的公共信息。

狀態服務器
如果是狀態化請求,那麼服務端一般需要保存請求的相關信息,每個請求可以默認地使用以前的請求信息。

狀態服務器具有以下特點:

  • 保存客戶請求的數據(狀態)
  • 服務端容易對客戶狀態進行管理
  • 服務端並不要求每次客戶請求都攜帶額外的狀態數據

無狀態服務器
無狀態服務器處理的客戶信息必須全部來自於請求所攜帶的信息以及其他服務器自身所保存的、並且可以被所有請求所使用的公共信息。

無狀態服務器具有以下特點:

  • 並不保存客戶請求的數據(狀態)
  • 客戶在請求時需要攜帶額外的狀態數據
  • 無狀態服務器更加健壯,重啓服務器不會丟失狀態信息,這使得維護和擴容更加簡單

無狀態的服務器程序,最著名的就是WEB服務器。每次HTTP請求和以前都沒有啥關係,只是獲取目標URI。得到目標內容之後,這次連接就被殺死,沒有任何痕跡。在後來的發展進程中,逐漸在無狀態化的過程中,加入狀態化的信息,比如COOKIE。服務端在響應客戶端的請求的時候,會向客戶端推送一個COOKIE,這個COOKIE記錄服務端上面的一些信息。客戶端在後續的請求中,可以攜帶這個COOKIE,服務端可以根據這個COOKIE判斷這個請求的上下文關係。COOKIE的存在,是無狀態化向狀態化的一個過渡手段,他通過外部擴展手段,COOKIE來維護上下文關係。
狀態化的服務器有更廣闊的應用範圍,比如MSN、網絡遊戲等服務器。他在服務端維護每個連接的狀態信息,服務端在接收到每個連接的發送的請求時,可以從本地存儲的信息來重現上下文關係。這樣,客戶端可以很容易使用缺省的信息,服務端也可以很容易地進行狀態管理。比如說,當一個用戶登錄後,服務端可以根據用戶名獲取他的生日等先前的註冊信息;而且在後續的處理中,服務端也很容易找到這個用戶的歷史信息。
狀態化服務器在功能實現方面具有更加強大的優勢,但由於他需要維護大量的信息和狀態,在性能方面要稍遜於無狀態服務器。無狀態服務器在處理簡單服務方面有優勢,但複雜功能方面有很多弊端,比如,用無狀態服務器來實現即時通訊服務器,將會是場惡夢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章