利用MQTT或者XMPP消息推送协议,当后台向mqtt客户端工具发送数据时,界面动态添加控件。

Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线
编辑:www.fx114.net
本篇文章主要介绍了"Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线",主要涉及到Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线方面的内容,对于Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线感兴趣的同学可以参考一下。
最近公司需要android的消息推送,在网上找了很多消息推送的例子,都是无法运行.
经过一段时间的研究,终于把例子运行起来了.现在共享出来,共同学习.
在下载的文件里面在bin目录下有run.bat文件直接双击即可运行.然后在浏览器里面输入
http://127.0.0.1:7070即可,如果在eclipse中运行了客户端即可在服务器端看到.这个很简单,不是本文的重点.现在主要的就是把下载后的的服务器端源码
搭建起来,然后部署到myeclipse中运行,当然可以在androidpn的官网下载(),
也可以下载我已经调好的程序.现在把源码共享给大家,
需要注意的是我的这个源码使用数据库是mysql,所以读者的pc机上需要安装mysql数据库,关于数据这里就不多说了.当然最好能够懂点spring和hibernate,这样的话改的时候更加顺手.
但是可能还有不懂hibernate的人,为了能够让他很好的运行,这里就简单的说一下了.
首先打开jdbc.properties:
# JDBC Configuration
jdbcDriverClassName=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
jdbcUsername=root
jdbcPassword=
# DBCP Pool settings
jdbcInitialSize=5
jdbcMaxActive=10
jdbcMaxIdle=5
jdbcMaxWait=30000
jdbcValidationQuery=select 1
------------------------------------------------------------
jdbcDriverClassName:表示数据库驱动的类名
jdbcUrl:表示连接数据库的url,其中test是数据库的名称
hibernate.dialect: 数据库方言
jdbcUsername和jdbcPassword:mysql的用户名和密码
其他的就不多说了.
如果没有以外的话,服务器启动成功后,可以在浏览器里输入:http://localhost:8080/
就可以出现如下界面:
然后,运行客户端代码,需要注意的是把androidpn.properties中的xmppHost改为你的局域网ip地址.运行如下图所示:
然后在浏览器中的Users界面可以看到手机与服务器之间的连接.如:
然后在Notifications界面可以发送消息给客户端:
在客户端就收到了通知:
其中通知里面的内容就是网页中message输入的内容.ok按钮就是网页中uri的内容.
最后还有一个问题当我们服务器端重启的时候,客户端就无法在连接到服务器了,除非把android后台的服务
关掉,然后重启才行.在XmmpManager中加上如下红色代码就可:
& & private void addTask(Runnable runnable) {
& & & & Log.d(LOGTAG, &addTask(runnable)...&);
& & & & taskTracker.increase();
& & & & synchronized (taskList) {
& & & & & & if (taskList.isEmpty() && !running) {
& & & & & & & & running =
& & & & & & & & futureTask = taskSubmitter.submit(runnable);
& & & & & & & & if (futureTask == null) {
& & & & & & & & & & taskTracker.decrease();
& & & & & & & & }
& & & & & & } else {
& & & & & &&//解决服务器端重启后,客户端不能成功连接androidpn服务器
& & & & & &&runTask();
& & & & & &&
& & & & & & & & taskList.add(runnable);
& & & & & & }
& & & & Log.d(LOGTAG, &addTask(runnable)... done&);
----------------------------------------------------------------------------------------------------------------------------------------------------------
今天公司终于把Androidpn服务器端部署到服务器端了,终于真正的上线了.
大体步骤如下:
1,把服务器的程序通过myeclipse到处war包,然后访问tomcat首页,把war包上传到tomcat服务器.
点击Tomcat Manager出现如下界面:
在默认的情况下登录不成功,需要在tomcat-user.xml文件中配置,在该文件的加上如下配置:
然后通过如下界面把war包上传到tomcat上:
注意需要在服务器电脑上有相应数据库(我这个里是mysql),并且有Androidpn对应的数据库(我这里的数据库名为test).并且还要注意数据库的用户名和密码.
2,假设服务器端已经能够访问了,需要把客户端的androidpn.properties文件的xmppHost的值改成你服务器端的主机名称,假设你的服务器端访问地址为:http://push.android.net:8080/ ,那么把xmppHost的值改成push.android.net
3,注意把你的8080端口和5222端口打开(这里是服务器那边的人搞的自己不是很懂).
---------------------------------------------------------------------------------------------------------------------------------------------------------
后续二 :关于Androidpn的一些问题()
1,如果把客户端的随机生成的UUID代码,改成把设备的id或者mac(device/mac)作为用户名,会出现重复插入的错误.
2,把客户端的数据清除(或者重新安装),那么sharedPre里的数据也会没有,然而服务器端又有我们手机的设备id,然后启动程序又会出现重复插入的问题.
所以解决方案为,在服务器端保存用户的时候,检查数据时候存在该用户.
因为在客户端来说自己有没有注册到服务器端,通过SharedPreferences里面是否存在username和password.
-------------------------------------------------------------------------------------------------------------------------------------------------
后续三 :关于Android推送的其他方式()
其他的推送方案 :&
1& 如果想要方便成本又低 , 推荐使用极光推送 , 只要集成它的官方SDK即可 . 在国内值比较出名的 , 推送文本是免费的 , 还可以推送媒体(收费) , 官网为&
2& android官网最新提供的 ,&GCM ,是用来代替的C2DM ,&其官网为&
3& 可以通过Java nio来实现自己的服务器, 听同事说它的经理自己通过Java NIO写了一个推送服务器 可以接收30w左右的并发, 自己正在尝试写一个 , 如果有进展 , 一定会共享给大家 . 同时可以研究apache的项目mina 该项目就是封装Java NIO的 .&
4& 当可以使用XMPP协议来实现 推送的. 自己也曾写过简单的一对一即时聊天软件.
5& 也可以通过MQTT协议来实现推送 .&
& & & & & & &客户端下载地址 :&&
& & & & & & &服务器下载地址 :&
本文标题:
本页链接:当前位置: >
如何通过WebSphere MQ Telemetry使用MQTT协议
WebSphere MQ Telemetry Transport (MQTT) 是一项异步消息传输协议,是 IBM 在分析了他们的客户在其业务中使用 WebSphere MQ 消息传递的情况(包括通过它传递数据)之后专门为物联网所定制的重要的轻量级消息传输协议。IBM 发现,数据经常是在企业外部的远程位置生成的,而且数据在从远程位置到达企业之前通常要经历一个复杂的过程。这时往往将数据人工输入计算机,然后只能通过 WebSphere MQ Enterprise 消息传递系统传输。而 MQTT 的开发将 WebSphere MQ 消息传递的应用范围延伸到这些远程位置。
WebSphere MQ 遥测传输 (MQTT) 是轻量级基于代理的发布 / 订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。这些特点使它适用于受限环境。例如,但不仅限于此:
网络代价昂贵,带宽低、不可靠。
在嵌入设备中运行,处理器和内存资源有限。
该协议的特点有:
使用发布 / 订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
对负载内容屏蔽的消息传输。
使用 TCP/IP 提供网络连接。
有三种消息发布服务质量:
&至多一次&,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
&至少一次&,确保消息到达,但消息重复可能会发生。
&只有一次&,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。
使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。
推送服务表现为客户端能自动收到发送过来的数据和信息。其目的都是为了给最终客户方便有效地发送最新消息或者数据。而且推送的模式对以前的数据访问方式提供很好的补充和发展。首先,给最终用户带来了很好的使用体验,可以实时的获取自己感兴趣的信息,与此同时,给端的应用商,也提供了更为便捷和主动的数据,服务发布方式,使得应用商能够控制信息发布的频率和时间,从而能更精准的投送的最终用户。
推送服务本质上是服务器主动将消息,数据发送到客户端,而不是客户端主动去服务器请求数据。这种推送只需要客户端与服务器连接后,在有数据的情况下,服务器端马上将数据发送到客户端。这里的客户端可以是多种类型的,比如比较常见的浏览器,移动应用等等。
推送服务的实现方式大致可分为 Poll 和 Push 模式。
Poll 模式,本质上是&伪推送&模式,或者叫短轮询模式。是客户端通过设定固定的时间间隔,然后在时间间隔到达后,客户端主动向服务器发送请求,去更新是否有新数据。这种模式的特点是,客户端需要不停的轮询访问服务器获取信息,其时间间隔设定无法真正体现实时推送,间隔太长容易导致信息不能实时的更新,间隔太短,客户端需要发送很多不必要的连接请求,耗费很多网络流量和服务器开销。比如在移动终端上,此类模式会在设备电能消耗,网络流量使用方面存在很多瓶颈。
Push 模式,一般意义上使用长连接去建立一个客户端到服务器的双向数据通道,只要在连接建立后,一旦一方有数据更新,就可以马上通过双向的数据通道向对方发送数据,平时在没有数据时,通过一些心跳等机制维持通道连接。Push 模式的特点,简化的客户端的开发,数据能近乎实时的发送到对方。但其在设备资源消耗和网络流量控制方面,根据其使用的不同协议会有很大不同,特别是在移动推送领域,长连接对移动设备电量和网络流量的消耗要求较高。同时,由于需要维护长连接,对服务器在高并发连接的处理能力和性能也有很高要求。
移动推送服务
推送服务在很多领域都有发展,但特别在移动领域,由于其飞速发展,给推送服务带来了很多新的机遇和挑战。首先,移动市场规模越来越大,终端种类和数量越来越多,使得推送服务的的重要性越来越凸显;其次,传统的&伪推送&模式已越来越不能满足其需要,需要发展新的推送的技术,这促使了很多新的协议和框架的出现;但是,由于移动领域的终端设备和网络情况的特点,对推送的协议和框架又提出了新的挑战,比如:移动终端的计算和存储资源的限制,移动终端的电量消耗的限制,移动网络流量和成本的控制等等。主流的移动推送解决方案如下:
作为传统的消息通讯,在新型移动环境下,在网络成本方面的考量使其地位有逐渐边缘化的趋势。
使用定时的 HTTP 轮询方式,及客户端在一定的时间间隔里去重复向服务器请求数据更新,属于&伪推送&,由于其协议复杂冗余,轮询间隔的不准确,耗费了不必要的流量,增加了终端用户网络成本等因素,现有的这种方式已经不适合做移动推送服务。
XMPP 是基于 XML 的通讯协议,此协议已基本上完成了标准化,成熟,强大,可扩展性强。但正是由于其协议复杂,冗余的设计,成为其在移动设备上短板,比如协议的复杂带来其协议栈的耗电增加,冗余的设计使得网络流量偏大,用户成本增加。
私有厂商协议和平台
私有厂商推出的推送服务,由于其协议私有,其传输效率和质量上无法量化和考证,而且还往往无法实现跨平台推送。同时,有些厂商提供的消息服务器不具备公开性,导致在用户数据安全性特别是服务器掌控方面存在担心。
如何通过WebSphere MQ Telemetry使用MQTT协议的相关阅读:
本站文章《》除注明转载外,均为本站原创或编译
转载请注明:本文由()提供欢迎免费转载,转载时请保留该信息,谢谢合作!
------分隔线----------------------------
如何通过WebSphere MQ Telemetry使用MQTT协议的网友评论原文地址:
实现点对点消息通知的关键问题
ActiveMQ使用MQTT协议,加上android上的paho包,即可简单实现消息通知功能,但是mqtt协议只支持topic,而且不能用selector,使得点对点的消息投递变成问题。
有两个解决思路:
1、每个clientId,建一个topic...这个办法对解决消息点对点投递非常有效,但是有两个大问题:
随着用户数增多,topic数量增多,对管理性要求增大,对内存的管理也有问题。
消息广播操作也变得非常麻烦,只能一个个的发送了。
2、另一个思路,就是在消息广播的基础上,进行点对点控制,实现某些特征的消息投递到指定的订阅者。
这个的实现比较简单,而且没有上面方案的大问题。代码稍微改下即可:/apache/activemq/pull/5/files
其实就只添加了一个新的类: ClientIdFilterDispatchPolicy
可以git clone所在版本源码,然后加上这个类,mvn package以后使用。
也可以用我打包好的jar:
本修改实现mqtt协议使用单个topic,来做消息广播和点对点的投递。
1、将本文件夹下的activemq-broker-5.9.0.jar、activemq-spring-5.9.0.jar换掉apache-activemq-5.9.0\lib下的jar。
2、参考本文件夹下activemq.xml,在topic上配置
&dispatchPolicy&
&clientIdFilterDispatchPolicy /&
&/dispatchPolicy&
3、对于此配置下的所有名称以.PTP结尾的队列,
如果要投递消息的properties里包含PTP_CLIENTID,则系统只会将此消息发给clientId为此值的订阅者;如果当前没有此clientId的订阅者,消息不会被任何人接收到。
如果投递消息的properties里不包含PTP_CLIENTID,则消息广播给所有的订阅者。 跟正常消息投递一致。
其中后缀.PTP和键值PTP_CLIENTID,是可以配置的:
&dispatchPolicy&
&clientIdFilterDispatchPolicy ptpSuffix=&& ptpClientId=&clientId&/&
&/dispatchPolicy&
如上配置,使得此policy下的所有topic都起作用,且消息的properties里获取clientId的key变成clientId。
消息发布者,如果要对所有人广播消息,直接发送消息即可。
如果要对指定的消息订阅者发消息,请在消息里设置接收者的clientId:
message.setStringProperty(PTP_CLIENTID, clientId);则此消息只有指定的订阅者可以拿到。
两台android设备使用MQTT协议订阅到ActiveMQ的同一个topic,clientId分别为mqtt-1001和mqtt1002;
写代码发两条消息,设置消息属性中PTP_CLIENTID分别为mqtt-1001和mqtt1002;
两个设备分别接收到自己的消息通知,相互之间没有影响。还可以测试下如果消息没有PTP_CLIENTID,两个都能收到。
相关 [activemq mqtt android] 推荐:
- 开源软件 - ITeye博客
ActiveMQ使用MQTT协议,加上android上的paho包,即可简单实现消息通知功能,但是mqtt协议只支持topic,而且不能用selector,使得点对点的消息投递变成问题. 1、每个clientId,建一个topic...这个办法对解决消息点对点投递非常有效,但是有两个大问题:. 随着用户数增多,topic数量增多,对管理性要求增大,对内存的管理也有问题. 消息广播操作也变得非常麻烦,只能一个个的发送了. 2、另一个思路,就是在消息广播的基础上,进行点对点控制,实现某些特征的消息投递到指定的订阅者. 这个的实现比较简单,而且没有上面方案的大问题. 代码稍微改下即可:/apache/activemq/pull/5/files.
- ITeye博客
使用activeMQ进行android推送. activeMQ下载地址:http://activemq.apache.org/download.html. 下载后是一个压缩包:apache-activemq-5.9.0-bin.zip. 解压缩,进入apache-activemq-5.9.0-bin\apache-activemq-5.9.0\bin,双击activemq.bat,即可启动activeMQ服务.
android客户端推送采用mqtt(paho-mqtt-client-1.0.1.jar),依赖包见附件. 但是为了测试,我写了一个swing图形界面,充当手机客户端,依赖的jar包仍然是paho-mqtt-client-1.0.1.jar.界面如下:.
- 移动开发 - ITeye博客
本文主旨在于,对目前Android平台上最主流的几种消息推送方案进行分析和对比,比较客观地反映出这些推送方案的优缺点,帮助大家选择最合适的实施方案. 方案1、使用GCM服务(Google Cloud Messaging). 简介:Google推出的云消息服务,即第二代的C2DM. 优点:Google提供的服务、原生、简单,无需实现和部署服务端. 缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、需要用户绑定Google帐号,受限于Google. 方案2、使用XMPP协议(Openfire + Spark + Smack). 简介:基于XML协议的通讯协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工作.
- 博客园_首页
/docs/broker/5.4/tuning/PersTuning-SerialToDisk.html.
KahaDB message store:KahaDB 是ActiveMQ Broker 为了高性能而推荐使用的消息存储机制. KahaDB支持多种性能选项供你进行调整,以获得最优性能. Normal dispatching through a persistent broker(持久化Broker常规分发):Figure2.1 持久化Broker的常规分发步骤总览.
从Producer接收消息后,Broker会按照如下的几个步骤分发消息给消费者:.
- 博客园_首页
摘要:ActiveMQ优化 客户端优化 预取限制. 原文:
/docs/broker/5.4/tuning/GenTuning-Consumer-Prefetch.html. Overview:图列4.1阐明了Broker在等待之前发送给客户端消息的反馈的行为.
如果客户端处理很慢的话,Broker会在之前发送消息的反馈之前,继续发送新的消息到客户端. 如果客户端依旧很慢的话,没有得到确认反馈的消息会持续增长. 在这种情况下,Broker有可能会停止发送消息给消费者. prefetch limit设置的数字时,Broker将会停止给消费者发送新的消息.
- CSDN博客互联网推荐文章
使用目的:将本地产生的消息转发到远程,通过远程服务器来处理消息,处理完成后,再启动消费者处理本地服务器消息(验证消息是否被转走,本地无消息可处理为正常). 消息在下面的地址被消费,无需任何特别配置,采用默认的配置即可. 生产消息地址为localhost:7001,需要做如下配置. 注意:&constructor-arg value=&messages.input&& 表示只有这个队列的会进行桥接转发. 因此在测试代码上需要注意改为Destination dest = session.createQueue(&messages.input&);.
- 博客园_首页
ActiveMQ 是Apache出品, 是最流行和最强大的开源消息总线. 同时完全支持 JMS 1.1和J2EE 1.4规范. 支持多种编程语言和协议编写客户端. 在JMS客户端和消息代理完全支持企业集成模式. 完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务). 对Spring的支持, ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性. 测试通过常见的J2EE服务器. 如:Geronimo, JBoss 4, GlassFish, WebLogic. 支持多种传送协议:in-VM, TCP, SSL, NIO, UDP, JGroups,JXTA.
- CSDN博客架构设计推荐文章
Activemq是众多开源消息中间件的一种,支持集群,同等网络,自动检测,TCP,SSL,广播,持久化,和J2EE1.4容器无缝结合. 它是apache基金会的一个项目,而且经过多年发展,有了很高的稳定性. 目前被很多知名项目使用,比如Apache serviceMix、FuseESB.
消息中间件一般被用在异步消息通信、整合多个系统的场景,比如你注册CSDN论坛,你填写完注册信息点提交时,它会发一份验证邮箱的验证邮件给到你,这封邮件就可以通过消息中间异步发送给你. 再举一个场景,原先有一个客户购买我们的工作管理平台,他用该平台模拟公司整个行政办公,业务流程,前提是把他原先的财务系统相关数据以单据的形式也要在我们的平台上走流程.
消息生产者使用持久(persistent)传递模式发送消息的时候,Producer.send() 方法会被阻塞,直到 broker 发送一个确认消息给生产者,这个确认消息暗示生产者 broker 已经成功地将它发送的消息路由到目标目的并把消息保存到二级存储中. 但有一个例外,当发送方法在一个事物上下文中时,被阻塞的是commit 方法而不是 send 方法. commit 方法成功返回意味着所有的持久消息都以被写到二级存储中. 同步发送持久消息能够提供更好的可靠性,但这潜在地影响了程序的相应速度,因为在接受到 broker 的确认消息之前应用程序或线程会被阻塞. 如果应用程序能够容忍一些消息的丢失,那么可以使用异步发送.
- CSDN博客架构设计推荐文章
消息持久性对于可靠消息传递来说应该是一种比较好的方法,有了消息持久化,即使发送者和接受者不是同时在线或者消息中心在发送者发送消息后宕机了,在消息中心重新启动后仍然可以将消息发送出去,如果把这种持久化和ReliableMessaging结合起来应该是很好的保证了消息的可靠传送. 消息持久性的原理很简单,就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等,然后试图将消息发送给接收者,发送成功则将消息从存储中删除,失败则继续尝试. 消息中心启动以后首先要检查制定的存储位置,如果有未发送成功的消息,则需要把消息发送出去. ActiveMQ持久化方式:AMQ、KahaDB、JDBC、LevelDB.
坚持分享优质有趣的原创文章,并保留作者信息和版权声明,任何问题请联系:@。消息推送,现在越来越火,现在百度也提供的有消息推送的服务,大家可以去搜索
&&&&&&& 关于服务器端向Android客户端的推送,主要有三种方式:
&&&&&&&&& 1、轮询,应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等。而且你还要考虑轮询的频率,如果太慢可能导致某些消息的延迟,如果太快,则会大量消耗网络带宽和电池;
&&&&&&&&& 2、SMS(通过发送短信并解析短信内容来获取服务器端的指令),这个出现的问题是很难找到免费的网关来发送短信;
&&&&&&&&& 3、最后就是持久连接,主要是Socket通讯,这个解决了性能问题,但是耗电问题依旧没能解决。
&&&&&&&&& 在这里,我们主要介绍的是第三种,用持久连接的方式来进行推送。现在比较成熟的及时消息传递协议共有四种,而无疑最为主流就是XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。在网上可以找到很多的XMPP资料,这里就不在赘述了,不然越扯越多。总之,XMPP主要显著的优点主要有以下几个方面:
1、 分布式& 任何人都可以运行自己的XMPP服务器,它没有主服务器
2、 安全性很高。使用SASL及TLS等技术的可靠安全性
3、 开发性 它是开源的,易于进行学习和了解
4、 跨平台& 毋庸置疑,使用的XML进行传输的
&&&&&&&& 说完优点,我们言归正传,基于XMPP协议的java开发有一个开源框架,那就是smack,它主要封装了一些XMPP的实现。而如果把它直接用在Android上是不行的,因为android缺少了一些java的类库,于是一个改进版的asmack诞生了,它是专门为android而改进的android smack。而另外一个开源框架的诞生,则是对在引用smack的基础上实现和服务器端的持久连接,以实现服务器对客户端的推送,那就是android push notification,简称androidpn。
&&&&&&&& Androidpn在客户端集成了asmack。这样就可以很容易的简立一个和服务器端的基于xmpp协议的socket连接。Androidpn的客户端中,进行管理连接的类是XmppManager,它主要用来管理连接的信息,比如XMPP的端口、IP、登录的用户名密码,以及对连接的维护。为什么还有用户名和密码?这不得不提到XMPP的具体细节。整个服务器端和客户端的通信是基于一个session(会话)过程,会话开始,首先会指定服务器的端口号,然后把上述提到的信息发送到服务器端,怎么发送消息的呢?以&stream&根节点的方式开始传递,只有在服务器和客户端关闭的时候才会发送它的结束标记&/stream&。客户端通过XMPP协议只用做的就是接收消息,而所有其它的操作都交给服务器,比如管理连接、消息保存等等,这样就很大程度的减轻了客户端的负担。那么客户端和服务器端的消息回应是如何实现的?如要通过一个ID来标识,具体细节可以去查看XMPP协议。
&&&&&&&&&&&& 一旦注册绑定后,服务器端就和客户端建立了连接,客户端只用负责去接收消息。所以当我们应用Androidpn的时候,客户端会非常的简单。而在服务器端,Androidpn又做了什么呢?
服务器端的展示方面,androidpn主要用到的技术是Spring和Hibernate。主要是用来展示用户状态和发送信息用的,下面的是服务器端的界面:
&&&&&& 主要要说的还是XMPP的管理。在服务器端的源码中一个org.androidpn.server.xmpp.net.Connection类,主要是代表一个服务器上的XMPP连接,注意只是一个,它可以确保在服务器关闭的时候,发送一个&/stream&标记到客户端,告知连接断开,需重新连接。
org.androidpn.server.xmpp.session.SessionManager主要用户管理所有会话,比如连接断开,删除session以及建立连接,添加session等等。
&&&&& 而在管理Socket连接的时候,androidpn采用了MINA框架来进行管理,MINA的优点就是改变了我们传统的管理socket的方式,比如没建立一个socket开一个线程,而MINA可以实现多个线程管理N多个用户。在处理高并发的推送上无疑是有巨大的好处的。
&&&& 合理的利用监听器来管理session,也是androidpn的优点。在安全性方面,制定了TLS(安全传输层)策略,并却采用了安全认证,这些方面都做的不错。
&&& 当然,不可避免的30秒钟的心跳包还是必不可少的。
&&&&& 总之,用Androidpn好处有以下方面:
&&&&&&&& 1.采用完全开放的XMPP协议进行数据传输(QQ,MSN,GTalk等都是采用的这种协议);
&&&&&&&& 2、良好的框架支持(专门为android 而产生的推送框架asmack,以及很好的管理socket的框架MINA,都是很成熟的产品);
&&&&&&&& 3、完全开放的源代码(我们可以在androidpn的基础上进行修改,来满足我们的任何需求变更);
&&&&&&&& 4、大大的减少了客户端的代码,降低了android的开发难度。
&&&&& 缺点不言而喻,使用了太多的框架,如果想要改一些具体的实现,可能会迁移发动全身。
大家试试快去吧,具体Androidpn可以在网上搜到,大家就自己去下载吧,
&&&& 本文的部分内容摘自网络。
阅读(...) 评论()}

我要回帖

更多关于 mqtt 客户端 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信