2008-12-18 78 views
4

我正在編程一個簡單的與Python服務器和Java客戶端的網絡聊天。 但是有一個問題進入我的腦海:最佳實踐:網絡通信

我應該使用哪種「網絡協議」進行通信? 有一些可能對我來說:

  • YAML:尼斯解析,提出問題:解析對象包含語言特有部分
  • XML:易解析,大開銷簡單的任務
  • 創建自己的「語言「:轉義問題,但最靈活

那麼最佳做法是什麼? 還有其他的選擇嗎?

+0

我們稱之爲數據格式,而不是協議。協議是FTP,HTTP等。 – 2008-12-18 11:43:46

+0

@ S.Lott:我不同意。數據格式是一種協議。它們將適合表示層的OSI模型。儘管術語協議通常意味着數據交換規則,但用於定義數據表示的用法仍然是正確的。 – 2008-12-18 23:31:24

回答

8

檢查JSON。它兼容多種語言(包括Python和Java),並且它是人類可讀的。 http://www.json.org/

如果你打算做Web開發,並計劃使用Javascript,那麼JSON可能是一個不錯的選擇,因爲它最初是爲Javascript設計的。 此外,與YAML相比,在Python中使用JSON與寫作一樣容易:import json(它是標準庫的一部分)。

您可能會看看下面的page,比較XML,JSON和YAML。看起來它們在編碼延遲和內存使用方面存在差異,這可能會指導您的選擇。

+0

另外,XML絕對不容易解析。不像JSON或YAML那樣容易解析。 – 2008-12-18 11:45:09

4

它可能有點重量級爲您的需求,但你有沒有考慮實施XMPP協議爲您的聊天客戶端?

如果你這樣做,那麼你的系統可能會與谷歌對話,Jabber的,iChat中,等

0

如果你想在協議也抽象掉的方法調用,看看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