2009-12-22 41 views
3

(所以this question has been asked before,但在一般意義上,大多數響應是在與多個服務器/客戶機/等的一般網絡通信的情況下)。無狀態協議的參數(上下文:簡單的點對點通信)

在簡單的點對點通信協議環境中,有狀態協議和無狀態協議的優缺點是什麼?我的直覺是無狀態更好(給予HTTP的很多暴露​​)與簡單的命令響應數據包,但我不知道爲什麼。我還與一位有着豐富的使用有序協議,連接建立方法等有狀態協議經驗的主管合作,他一直鼓勵我使用有狀態協議。我們處於一種僵局,似乎無法說服對方正確的做法。

Another question about simple point-to-point communications protocols帶來了一些很好的例子,即HDLC(有狀態)和MODBUS(無狀態)。

+0

p.s.不確定是否要製作社區wiki。如果你感覺強烈,請讓我知道。 – 2009-12-22 16:32:09

回答

2

如果從對話的角度來看待協議,那可能會更容易一些。

在無狀態協議中,沒有「Hello」或「Goodbye」。每個請求只是「給我那個」,「拿這個」等等,每個請求都是獨立的。如果客戶端給服務器一些東西,它並不關心服務器用它做什麼。如果客戶需要知道它剛剛給服務器的內容,那麼它會再次要求它進行驗證。

這個(無狀態)聽起來不錯,對於兩個獨立的進程(服務器和客戶端)來說,特別是鬆散耦合時更是如此。

但是,如果有兩個合作進程,其中兩個任務相互依賴,另一個需要另一個的輸出對於他們都是成功的,那麼無狀態會增加開銷,因爲每個通信和操作都需要驗證的問題。或者需要在兩者之間共享一個背景。

想想外科醫生和她的助手處理她的工具。外科醫生說「scapel」,她知道當她手裏拿着手術刀時,溝通已經完成。 「狀態」助理可以跟蹤通信的狀態,並知道在「scapel」將會發出「吸氣」或「牽開器」命令之後,並準備好適當的儀器。所以談話有一個國家 - 開始和結束 - 「你好」和「再見」。這很好,因爲它可以減少延遲並降低通信開銷。

您可以讓外科醫生/助理協議無狀態 - 但會影響整體結果的質量?