根据工作业务需要,要做一款自己的推送,在选择协议的时候进行了全面的考察。查阅了很多资料,在这里把查阅的结果对比列表发出来,方便 大家以后进行选择。
| DDpush | xmpp | mqtt |
优势 | 是一款开源免费的单机千万级实时信息推送服务器,使用Java语言开发,具有简单、稳定、高性能、高容量等特点,适用于互联网、移动互联网、物联网、Android、智能设备、硬件设备等各种环境。 开源、免费 容量高,速度快,要求低 终端设备流量少,省电 DDPush基于自有的二进制网络传输协议(基于TCP和UDP),因此客户端可以支持各种类型的终端设备,包括各种智能手机、平板、智能设备、物联网硬件,和各种终端操作系统(包括: android, Windows, Linux等)。
国内开源DDPush任意门推送,适合中小型公司和团队
| 要涉及到上层业务,设计到用户分群分组,用户层次关系的维护,xmpp已经为你做了很多很多,后期的开发会很省心
协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。
协议成熟,强大,可扩展性强,并且有成熟的开源方案。
分布式:任何人都可以运行自己的XMPP服务器,它没有主服务器 2、安全性高:使用TLS等技术 3、跨平台
| 二进制,非常精简,适合做大量节点弱网络差的场景,非常适合现在移动互联网的基础设施 开源的协议和实现;扩展方便且轻量级 MQTT 是专门针对移动互联网开发的轻量级传输协议,这种传输协议连接稳定、心跳数据包小,所以具备耗电量低、耗流量低的优势。推送服务的最佳协议! MQTT代码量也比XMPP小很多,传输速度非常快。使用容易 mqtt更适合做推送
协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域
且极易扩展,适合二次开发 协议简洁轻巧,数据冗余量低。并且支持的设备从智能硬件到智能手机无所不包。 |
缺点 | 对于XMPP等其他方式,很多开发者习惯直接使用其来传递信息内容。而DDPush提倡传递“控制信息”,类似FTP的工作模式。即:通过DDPush来传递命令和控制信息,真正的内容信息建议终端使用常见的HTTP GET或者新建TCP连接的方式,连接到应用服务器(而不是DDPush服务器)获取。
| 协议虽然完整扩展性虽然好,它耗费网络流量很大,交互此说太多,跑起来比MQTT慢很多;另外有高达70%的流量是耗费在XMPP本身的标签和编解码上面。 XMPP是XML格式的,冗余很大
协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。
| 不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。 服务器端实现难度大,虽然已经有了 C++ 版本的服务端组件,但是并不开源。而且在推送数量较大时如何处理并发是十分考验后台人员的技术水平的
MQTT只支持TCP不支持UDP |
xmpp现有的开源项目不足:
1、androidpn服务端重启后客户端不会重连,这个非常悲剧
2、由于服务器不保存消息,造成了如果客户端当前离线就收不到消息。
3、androidpn发送完消息就不管了,所以没有消息回执报表之类,造成没法做应用后续的数据分析用户体验的改善,这对于企业级的应用是个致命伤。
XMPP协议比较费电费流量,这个对当前智能机的消耗太大,在窄带网络和不稳定的(手机)网络都不是最优的选择。但总体来说,XMPP协议还是比较成熟的。