类似微信,但是同时在线人数要求并不太高(10 万人左右)
因为我一直是做 web 开发的,并不太了解移动开发的一些禁忌,看了些有关微信的架构,也是比较模糊,主要是我该选什么协议,如何同步状态。微信的文档里说
“微信的协议 里面提到了 XMPP 和类 Sync 的自定义协议,里面提到 XMPP 的缺点是流量大和消息不可靠。但是流量大并非 XMPP 主要矛盾,可以很简单将其映射成二进制协议。消息 ACK 也可以添加简单的扩展协议来实现。较繁琐的还是兼容 CMWAP 网关的设计。 使用 XMPP 或者简化的 XMPP 标准协议有很多好处,类似的场景有业界广泛使用的 open api 基本都使用 HTTP 及 JSON,并不是由于这两种协议优化或高效,而是其简洁并得到广泛的认知。一种标准协议的认知及扩展成本要比一个自定义协议小得多,XMPP 流量大的问题可以通过转换协议来实现,比如用 binary 1 代表 login 等全部协商协议,2 代表 message,消息增量获取也可以通过自定义扩展协议来实现。标准协议可以让团队内部及新人的认知成本降低,每一个参与者都很容易想到代码及架构改进建议。而且微信目前也在构建开放平台,自定义协议在开放方面必然具备一些局限。”
本来理所当然想到 xmpp,nginx,ejabberd,是否还适用在手机 im 后台的开发? 类 Sync 协议是指微软的 Direct Push 协议么?这个是否可行,可以用来开发 im 否? http://www.cnblogs.com/fox23/archive/2008/05/17/directpush-exchangeserver2007-overview.html
求熟悉手机开发的同学给点思路,thanks very much
XMPP 流量其实不大,本来即时消息就没多大流量。XMPP 最大的问题是默认每次登录都要拉一次联系人列表,往往这个才是流量的最大来源,而客户端是自己开发的话,这个明显是可以绕过的。所以没问题的。
是的,xml 的缺点是数据的有效载荷低和 pack/unpack 耗资源 随便打开一个 XML 文件,发现里面有用的数据都是被 tag 包围着的,不管这个数据的长短等等其他属性,它都要被包围,如果将 xml 在网络上传输,或者弄成数据流,显然数据的有效载荷就直接降低了。另外,tag 的使用,父 tag,子 tag 的分层,使得 xml 的 pack 和 unpack 都耗资源:包括 cpu 和内存。 #5 楼 @killyfreedom
@kehao 去年为一个牌子做路演的时候,用的 XMPP 搭了一个游戏服务器,用的是本地服务器..一台服务器接两个设备,一天走了 2G 的流量....还是那个游戏没什么人玩的时候....
#9 楼 @calebx w3c 的一个协议,html5 标准里的,去年 12 月才成为正式标准,全名 server sent events,我已经在正式项目里用了,效率很高,你可以好好看看协议的定义: http://dev.w3.org/html5/eventsource/
从单个 message 看,overhead 是不大的,不然 HTTP 也别用了,单个请求的 overhead 远大于 XMPP 单个 message 的 overhead。
<message to="[email protected]">
<body>
<a href="http://xml.suc.ks">XML Sucks</a>
</body>
</message>
#14 楼 @mjf429 #13 楼 @killyfreedom 多谢~ faye 过来 push 一些通知还是可以的,但是要自己定义复杂的协议就耗时太大了。 先搞搞客户端什么的。
@bhuztez XML 相对而 JSON 而言,构建一个层级的数据结构,会把原来的数据量扩大的更多,不是 XMPP 的问题,是 XML 的问题
看来你根本就没搞清楚问题。JSON 在这里并不比 XML 好...
XML 风格
<message to="[email protected]">
<body>
<a href="http://xml.suc.ks">XML Sucks</a>
</body>
</message>
RFC2822 风格
To: [email protected]
Content-Length: XXX
<body>
<a href="http://xml.suc.ks">XML Sucks</a>
</body>
JSON 风格
{"message": [{"to": "[email protected]"},
"<body><a href=\"http://xml.suc.ks\">XML Sucks</a></body>"]}
推荐看下《RubyConfChina 2012 叶玎玎 -- "Real Time Web solutions with Ruby"》 http://railscasts-china.com/episodes/rubyconf-2012-yedingding
我们的 IM 产品就是采用的 XMPP 和 Ejabberd,非常不错。 我觉得选用通用的协议更好,像微博 Chat、Gtalk、人人 Chat 都是使用的 XMPP 不过我很不喜欢 XML,这点让 XMPP 的数据传输有些冗余,但是这个不重要,这个不会在你初步阶段成为障碍 移动终端,无论是 iOS 还是 Andriod,还是 Web 包装耗电量和流量消耗都完全是可以接受的。