2013-03-01 108 views
0

Helo,我正在開發一款手機遊戲,需要從客戶端到服務器的實時通信。基於二進制的xmpp服務器?

通常我會實現一個TCP套接字服務器,並使用一些私有二進制協議來啓用雙向通信,現在我也正在尋找像基於標準的Ejabberd這樣的XMPP服務器。但是XML在某種程度上真的是冗餘且效率低下,尤其是對於移動應用程序來說,這可能意味着更多的流量和內存消耗。

  1. XMPP是否必須使用XML?
  2. 是否有任何使用二進制作爲低級數據格式而不是使用XML的XMPP實現? (或者我不應該選擇XMPP並從其他標準或技術開始。)
  3. 任何使用XMPP減少發送複雜數據對象(不是大文件對象)開銷的策略?
+2

不確定你要求什麼......任何XMPP將使用XML - 否則它不是XMPP。編輯:顯然是有一個(笑話)二進制XMPP協議:http://xmpp.org/extensions/xep-0239.html – Turch 2013-03-01 17:00:32

+0

對不起,我不清楚,我更新了這個問題。協議設計者似乎認爲這不是使用XML的問題。在我看來,即使JSON可以比XML節省大量的冗餘流量。基於一些搜索谷歌談話API也採用二進制格式,如果我沒有錯。 – 2013-03-01 17:23:42

+0

當然使用二進制協議有它的優點。但它也有一些主要的缺點可以通過XMPP解決。在大多數使用情況下,基於XML的協議的開銷是可以忽略的。當你不需要它們時,不要試圖優化它們。以二進制形式實現像XMPP這樣的全功能聊天協議並不是一項簡單的任務。這就是爲什麼在開源世界中不存在這樣的事情。通過流壓縮,「上限」和進一步優化以及XEP,即使在資源受限的環境中,XMPP也可以非常有效。 – Flow 2013-03-02 12:24:12

回答

2

XML是XMPP規範所要求的,所以沒有二進制實現。它確實包含更多的開銷,但是您必須記住XMPP旨在解決的問題 - 一個活動的聊天連接可能會傳輸每秒一個消息。

至於Google Talk api:他們使用非xml協議的客戶端 - Google服務器連接。當我在Gmail客戶端發送郵件時,請求正文只包含一堆發佈數據:

count=1&ofs=16&req0_type=m&req0_to=my.friend%40gmail.com&req0_id=6A8466CBC59CBB0C_0&req0_text=test&req0_chatstate=active&req0_iconset=classic&req0__sc=c 

那部分不是XMPP。接受該請求的服務器然後執行創建和發送XMPP請求的工作。 XMPP仍然使用XML,它們只是在客戶端和Google服務器之間使用不同的協議。

+0

謝謝你提供的見解。我認爲減少發送複雜數據結構而不觸及協議的開銷是一個很好的策略。這對MMO遊戲場景非常有用,我會嘗試這種方式。 – 2013-03-02 03:15:34