2013-03-01 60 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