我正在編程一個簡單的與Python服務器和Java客戶端的網絡聊天。 但是有一個問題進入我的腦海:最佳實踐:網絡通信
我應該使用哪種「網絡協議」進行通信? 有一些可能對我來說:
- YAML:尼斯解析,提出問題:解析對象包含語言特有部分
- XML:易解析,大開銷簡單的任務
- 創建自己的「語言「:轉義問題,但最靈活
那麼最佳做法是什麼? 還有其他的選擇嗎?
我正在編程一個簡單的與Python服務器和Java客戶端的網絡聊天。 但是有一個問題進入我的腦海:最佳實踐:網絡通信
我應該使用哪種「網絡協議」進行通信? 有一些可能對我來說:
那麼最佳做法是什麼? 還有其他的選擇嗎?
檢查JSON。它兼容多種語言(包括Python和Java),並且它是人類可讀的。 http://www.json.org/
如果你打算做Web開發,並計劃使用Javascript,那麼JSON可能是一個不錯的選擇,因爲它最初是爲Javascript設計的。 此外,與YAML相比,在Python中使用JSON與寫作一樣容易:import json
(它是標準庫的一部分)。
您可能會看看下面的page,比較XML,JSON和YAML。看起來它們在編碼延遲和內存使用方面存在差異,這可能會指導您的選擇。
另外,XML絕對不容易解析。不像JSON或YAML那樣容易解析。 – 2008-12-18 11:45:09
它可能有點重量級爲您的需求,但你有沒有考慮實施XMPP協議爲您的聊天客戶端?
如果你這樣做,那麼你的系統可能會與谷歌對話,Jabber的,iChat中,等
如果你想在協議也抽象掉的方法調用,看看XML-RPC,其中Java和互操作Python(以及其他幾乎所有的東西)都有很好的支持。
對象編組和解組是固體,可以處理Unicode的,列表和字典,併產生漂亮的人類可讀的輸出:
>>> import xmlrpclib
>>> print xmlrpclib.dumps((1, u"\xdd\xde"), methodname="my_method")
<?xml version='1.0'?>
<methodCall>
<methodName>my_method</methodName>
<params>
<param>
<value><int>1</int></value>
</param>
<param>
<value><string>ÝÞ</string></value>
</param>
</params>
</methodCall>
基本上,它有Mapad提到有關JSON,與額外的功能帶來的好處的方法調用,代價是(可能是邊際的)處理成本和(可能是邊際的)編程複雜性。
Doug Hellman爲Python XML-RPC庫的客戶端和服務器端提供了很好的教程here。
我們稱之爲數據格式,而不是協議。協議是FTP,HTTP等。 – 2008-12-18 11:43:46
@ S.Lott:我不同意。數據格式是一種協議。它們將適合表示層的OSI模型。儘管術語協議通常意味着數據交換規則,但用於定義數據表示的用法仍然是正確的。 – 2008-12-18 23:31:24