2013-03-02 91 views
1

在設計客戶端 - 服務器系統(JAVA)時,我必須設計協議。我知道在現實世界中我可以使用HTTP e.t.c,這就像重新發明輪子。但是,我可以設計基於無狀態協議或面向狀態的協議(如POP3)的協議,但我不知道消息應該是什麼樣子。客戶 - 服務器系統 - 設計協議

我從來沒有做過/見過協議設計,並想知道如果任何人有一個協議的設計,我可以看到或任何通知的例子嗎?

謝謝

+1

我有 - 我通常使用HTTP。 – duffymo 2013-03-02 14:29:43

回答

0

你也許可以重新發明輪子,爲什麼不能用常規的網絡應用程序去?你的需求看起來類似於webapps。設計你自己的協議不是太難,但是正確的做法是。如果設計得不合適,它可能會讓你的消息類型,確認,重新連接邏輯臃腫,甚至沒有。

你想通過HTTP基於文本?然後你可以使用'消息類型' - '消息有效載荷'來完成幾乎所有的事情。

如果它的二進制你在看,然後「包長度」 - 「操作碼+郵件頭字節,如果需要」 - 「郵件正文」 - 「校驗」通常會得到你想要的東西。

因此,對於你的要求,「LOG_IN」將成爲當客戶端試圖登錄的消息操作碼/類型,用戶名和密碼會被人體或消息的有效載荷等。

對於人類可讀的消息格式看看AMQP標準,你可能會得到一些指點那裏。

+0

我應該解釋更多 - 我們不能使用HTTP或類似的,因爲我必須設計自己的簡單協議。最終計劃將基於簡單的文本。你有什麼其他的建議來設計協議或一個很好的例子嗎?謝謝 – underflow 2013-03-02 18:29:59

+0

我想你可以在這裏得到你的指針Q - > http://stackoverflow.com/questions/1959448/how-to-write-a-simple-text-based-protocol-preferably-in-c – Abe 2013-03-03 13:50:25

0

當編寫一個客戶端 - 服務器系統,你難免會碰到Sockets。這些用於端口之間的通信。

當註冊用戶時,如果您希望它是持久性的,您將需要訪問某種數據庫,您可以閱讀有關here的信息。

正如上面所說的,它是如何HTTP結構在協議包來定義不同的用戶讀到。如果你想使用你自己的設計,這將爲你提供靈感。

最後,請記住效率。你希望你的數據包儘可能小和健壯。