如何自己搭建一个xmpp,实现推送消息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何自己搭建一个xmpp,实现推送消息相关的知识,希望对你有一定的参考价值。

主要有三种方式:
1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据。但是实现简单,主要缺点:耗电等。
2.Google的C2DM,具体不细说,缺点,服务器在国外,你懂得,不是很稳定。
3.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。

接下来说说XMPP在android客户端上的应用。分两部分:服务端搭建和客户端实现。

服务端搭建:
如果想测试一下功能,直接用搭建好的服务就行,下载androidpn-server-0.5.0-bin.zip 。

点击bin目录下得run.bat,直接搭好服务,在浏览器上输入 http://127.0.0.1:7070  就进入管理界面。如下图:

客户端实现:
下载工程源码  androidpn-client-0.5.0.zip (347.74 KB, 下载次数: 25185) ,导入工程,运行前更改一处IP地址,修改androidpn.properties文件中的xmppHost为xmppHost=10.0.2.2
原因:模拟器访问本机需要改成10.0.2.2,下图为SDK中说明。

从服务端发送消息,客户端运行的界面:

参考技术A Android推送方案分析(MQTT/XMPP/GCM)
蜗牛TT 发布于 4个月前,共有 11 条评论
本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案。
方案1、使用GCM服务(Google Cloud Messaging)
简介:Google推出的云消息服务,即第二代的G2DM。
优点:Google提供的服务、原生、简单,无需实现和部署服务端。
缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google。

方案2、使用XMPP协议(Openfire + Spark + Smack)
简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作。
优点:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。
缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。

方案3、使用MQTT协议(更多信息见:http://mqtt.org/)
简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。
优点:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考:http://mqtt.org/software),且已有C++版的服务端组件rsmb。
缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。

方案4、使用HTTP轮循方式
简介:定时向HTTP服务端接口(Web Service API)获取最新消息。
优点:实现简单、可控性强,部署硬件成本低。
缺点:实时性差。

对各个方案的优缺点的研究和对比,推荐使用MQTT协议的方案进行实现,主要原因是:MQTT最快速,也最省流量(固定头长度仅为2字节),且极易扩展,适合二次开发。接下来,我们就来分析使用MQTT方案进行Android消息的原理和方法,并架设自己的推送服务。

如果还不明白的 话,要看分析的话,给你个网址:http://m.oschina.net/blog/82059
自己看看。本回答被提问者和网友采纳

Android 推送通知的架构

【中文标题】Android 推送通知的架构【英文标题】:Architecture of Android Push Notification 【发布时间】:2015-03-03 19:39:47 【问题描述】:

我正在尝试实现类似于 Google Cloud Messaging 的功能,并且我的手机上有一个有效的 XMPP 服务并配置了 XMPP 服务器。

有人可以在电话中介绍一下架构吗? android如何知道何时显示传入消息的通知?以及何时更新应用程序?

例如,在 Google Hangouts 中,当您收到新消息时,会显示通知,如果用户在对话框架中,则对话会更新。

【问题讨论】:

"android 如何知道何时显示收到消息的通知?何时更新应用程序?" -- 对于编写 XMPP 客户端库的人来说,这将是一个问题。 【参考方案1】:

对于通知,您必须阅读本教程 android notifications,客户端库(如 smack)为您抽象 XMPP 服务器和客户端之间的通信,您侦听传入的消息,并且每当消息到达时,您都会显示通知。我希望这可以帮助你。

【讨论】:

我正在使用 SMACK 并且能够接收消息并显示通知。当聊天应用程序关闭时,这很好。但是当聊天应用程序打开时,通知不应该显示并且聊天应用程序需要更新。这是我的问题。 我看到了一个与您要查找的内容相关的代码,我没有对其进行测试,但这里是您想要使用它的案例的链接? link

以上是关于如何自己搭建一个xmpp,实现推送消息的主要内容,如果未能解决你的问题,请参考以下文章

android消息推送GCM、XMPP、MQTT三种方案的优劣,越仔细越好,有具体分析更好!

使用极光推送实现分组发送和服务端集成

android系统的APP消息推送机制

通过 XMPP 从 myapplication 推送消息

发送 GCM 上游消息后收到空推送消息

winform上如何实现服务器消息实时推送?