- 浏览: 7344237 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
在Androidpn的底层主要采用的mina和openfire两大框架,其中mina主要为底层数据传输的Socket框架。下面简单说明mina的框架。
Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。Mina 主要有1.x 和2.x 两个分支,这里我们讲解最新版本2.0,如果你使用的是Mina 1.x,那么可能会有一些功能并不适用。学习本文档,需要你已掌握JAVA IO、JAVA NIO、JAVASocket、JAVA 线程及并发库(java.util.concurrent.*)的知识。Mina 同时提供了网络通信的Server 端、Client 端的封装,无论是哪端,Mina 在整个网通通信结构中都处于如下的位置:
可见Mina 的API 将真正的网络通信与我们的应用程序隔离开来,你只需要关心你要发送、接收的数据以及你的业务逻辑即可。同样的,无论是哪端,Mina 的执行流程如下所示:
(1.) IoService:这个接口在一个线程上负责套接字的建立,拥有自己的Selector,监听是否有连接被建立。
(2.) IoProcessor:这个接口在另一个线程上负责检查是否有数据在通道上读写,也就是说它也拥有自己的Selector,这是与我们使用JAVA NIO 编码时的一个不同之处,通常在JAVA NIO 编码中,我们都是使用一个Selector,也就是不区分IoService与IoProcessor 两个功能接口。另外,IoProcessor 负责调用注册在IoService 上的过滤器,并在过滤器链之后调用IoHandler。
(3.) IoFilter:这个接口定义一组拦截器,这些拦截器可以包括日志输出、黑名单过滤、数据的编码(write 方向)与解码(read 方向)等功能,其中数据的encode 与decode是最为重要的、也是你在使用Mina 时最主要关注的地方。
(4.) IoHandler:这个接口负责编写业务逻辑,也就是接收、发送数据的地方。
Mina自带的过滤器(部分)
由上面的Mina的执行的过程可以知道针对使用Mina的第三方来说主要的业务主要在IoHandler中。
androidpn-server的spring配置。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd"> <!-- =============================================================== --> <!-- Resources --> <!-- =============================================================== --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:jdbc.properties</value> </list> </property> </bean> <!-- =============================================================== --> <!-- Data Source --> <!-- =============================================================== --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbcDriverClassName}" /> <property name="url" value="${jdbcUrl}" /> <property name="username" value="${jdbcUsername}" /> <property name="password" value="${jdbcPassword}" /> <property name="maxActive" value="${jdbcMaxActive}" /> <property name="maxIdle" value="${jdbcMaxIdle}" /> <property name="maxWait" value="${jdbcMaxWait}" /> <property name="defaultAutoCommit" value="true" /> </bean> <!-- =============================================================== --> <!-- Hibernate --> <!-- =============================================================== --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:hibernate.cfg.xml" /> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- =============================================================== --> <!-- Data Access Objects --> <!-- =============================================================== --> <bean id="userDao" class="org.androidpn.server.dao.hibernate.UserDaoHibernate"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- =============================================================== --> <!-- Services --> <!-- =============================================================== --> <bean id="userService" class="org.androidpn.server.service.impl.UserServiceImpl"> <property name="userDao" ref="userDao" /> </bean> <!-- =============================================================== --> <!-- SSL --> <!-- =============================================================== --> <!-- <bean id="tlsContextFactory" class="org.androidpn.server.ssl2.ResourceBasedTLSContextFactory"> <constructor-arg value="classpath:bogus_mina_tls.cert" /> <property name="password" value="boguspw" /> <property name="trustManagerFactory"> <bean class="org.androidpn.server.ssl2.BogusTrustManagerFactory" /> </property> </bean> --> <!-- =============================================================== --> <!-- MINA --> <!-- =============================================================== --> <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer"> <property name="customEditors"> <map> <entry key="java.net.SocketAddress"> <bean class="org.apache.mina.integration.beans.InetSocketAddressEditor" /> </entry> </map> </property> </bean> <bean id="xmppHandler" class="org.androidpn.server.xmpp.net.XmppIoHandler" /> <bean id="filterChainBuilder" class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder"> <property name="filters"> <map> <entry key="executor"> <bean class="org.apache.mina.filter.executor.ExecutorFilter" /> </entry> <entry key="codec"> <bean class="org.apache.mina.filter.codec.ProtocolCodecFilter"> <constructor-arg> <bean class="org.androidpn.server.xmpp.codec.XmppCodecFactory" /> </constructor-arg> </bean> </entry> <!-- <entry key="logging"> <bean class="org.apache.mina.filter.logging.LoggingFilter" /> </entry> --> </map> </property> </bean> <bean id="ioAcceptor" class="org.apache.mina.transport.socket.nio.NioSocketAcceptor" init-method="bind" destroy-method="unbind"> <property name="defaultLocalAddress" value=":5222" /> <property name="handler" ref="xmppHandler" /> <property name="filterChainBuilder" ref="filterChainBuilder" /> <property name="reuseAddress" value="true" /> </bean> </beans>
通过Mina的原理我们研究androidpn的运行流程不能看出,如下:
androidpn-server执行过程如下:
1.spring初始化并启动过程,调用NioSocketAcceptor。
2。NioSocketAcceptor开始执行调用IoProcessor.
3.IoProcessor开始调用FilterChain。FilterChain调用相关的IoFilter的。其中ProtocolCodecFilter的过滤器调用了org.androidpn.server.xmpp.codec.XmppCodecFactory进行编码。
4.XmppIoHandler实现自IoHanlder并调用通过openfire 的XMLLightweightParser解析相关的业务逻辑。
5.根据解析的信息调用xmpp并处理相关信息。
评论
XmppIoHandler的sessionOpened方法无法完成实例化StanzaHandler handler = new StanzaHandler(serverName, connection);其中serverName和connection都有值
具体的错误信息也很奇怪
java.lang.NullPointerException
at org.androidpn.server.xmpp.net.XmppIoHandler.messageReceived(XmppIoHandler.java:184)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:713)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:375)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:229)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:71)
at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:780)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:772)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:714)
at java.lang.Thread.run(Thread.java:662)
明明说XmppIoHandler类 184行的org.androidpn.server.xmpp.net.XmppIoHandler.messageReceived方法报null,你仔细监控这段代码。。
XmppIoHandler的sessionOpened方法无法完成实例化StanzaHandler handler = new StanzaHandler(serverName, connection);其中serverName和connection都有值
具体的错误信息也很奇怪
java.lang.NullPointerException
at org.androidpn.server.xmpp.net.XmppIoHandler.messageReceived(XmppIoHandler.java:184)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$TailFilter.messageReceived(DefaultIoFilterChain.java:713)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
at org.apache.mina.filter.codec.ProtocolCodecFilter$ProtocolDecoderOutputImpl.flush(ProtocolCodecFilter.java:375)
at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:229)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434)
at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46)
at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793)
at org.apache.mina.core.filterchain.IoFilterEvent.fire(IoFilterEvent.java:71)
at org.apache.mina.core.session.IoEvent.run(IoEvent.java:63)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTask(OrderedThreadPoolExecutor.java:780)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.runTasks(OrderedThreadPoolExecutor.java:772)
at org.apache.mina.filter.executor.OrderedThreadPoolExecutor$Worker.run(OrderedThreadPoolExecutor.java:714)
at java.lang.Thread.run(Thread.java:662)
发表评论
-
[转]年度最实用50款免费Android应用推荐
2012-11-08 16:39 3380据国外媒体报道,有人说Android应用市场比iPhone应用 ... -
MQTT的学习研究(十七)Mosquitto简要教程(安装&使用)
2012-10-23 16:34 19822Mosquitto是一个实现了MQTT3.1协议的代理服务器, ... -
MQTT的学习研究(十六) MQTT的Mosquitto的window安装部署
2012-10-23 16:28 38896在mqtt的官方网站,有许多mqtt, 其中: Mos ... -
GIS的学习(四十五)【转】Integration of the MBTiles format on Android
2012-10-22 17:13 2951转载自 http:/ ... -
MQTT的学习研究(十五) MQTT 和android整合文章
2012-10-22 17:06 5248详细参考: How to Implement Pu ... -
MQTT的学习研究(十四) MQTT moquette 的 Callback API 消息发布订阅的实现
2012-10-19 14:08 11942在moquette-mqtt中提供了回调callback ... -
MQTT的学习研究(十三) IBM MQTTV3 简单发布订阅实例
2012-10-19 13:51 12834使用IBM MQTTv3实现相关的发布订阅功能 MQTTv3 ... -
MQTT的学习研究(十二) MQTT moquette 的 Future API 消息发布订阅的实现
2012-10-19 13:38 7737基于Future 模式的 ... -
MQTT的学习研究(十一) IBM MQTT 简单发布订阅实例
2012-10-19 13:30 6336package com.etrip.push; impo ... -
MQTT的学习研究(十)【转】mosquitto——一个开源的mqtt代理
2012-10-19 13:21 13447MQTT(MQ Teleme ... -
MQTT的学习研究(九)基于HTTP GET MQTT 抓取消息服务端使用
2012-10-18 15:25 5101官方参看文档: HTTP GET 接收主题请求协议和响应协议 ... -
MQTT的学习研究(八)基于HTTP DELETE MQTT 订阅消息服务端使用
2012-10-18 15:20 4279参看官方文档 HTTP DELETE 订阅主题 ... -
MQTT的学习研究(七)基于HTTP POST MQTT 发布消息服务端使用
2012-10-18 15:11 7813参阅官方文档 http:// ... -
MQTT的学习研究(六) MQTT moquette 的 Blocking API 订阅消息客户端使用
2012-10-17 16:56 21928参阅官方文档: http://publib.boulder. ... -
MQTT的学习研究(五) MQTT moquette 的 Blocking API 发布消息服务端使用
2012-10-17 16:52 30750参看官方文档: http://publib.bould ... -
MQTT的学习研究(四)moquette-mqtt 的使用之mqtt Blocking API客户端订阅并接收主题信息
2012-10-16 15:51 14637在上面两篇关于mqtt的broker的启动和mqtt的服 ... -
MQTT的学习研究(三)moquette-mqtt 的使用之mqtt服务发布主题信息
2012-10-16 15:48 19860接着上一篇的moquette-mqtt 的使用之 ... -
MQTT的学习研究(二)moquette-mqtt 的使用之mqtt broker的启动
2012-10-16 15:42 36855在MQTT 官网 (http://mqtt.o ... -
MQTT的学习研究(一)MQTT学习网站
2012-10-16 15:21 11298MQTT的官方推荐网站: http://mqtt.org/s ... -
GIS的学习(四十四)osmdroid sdcard检查
2012-10-15 16:12 2341在许多应用中使用到sdcard的检查,在osmdro ...
相关推荐
《AndroidPN:构建高效消息推送服务的探索与实践》 AndroidPN(Android Push Notification)是专为Android系统设计的一种远程...对于任何希望提高用户互动性的开发者来说,理解和掌握AndroidPN的使用是至关重要的。
在"androidpn-server-0.5.0"这个压缩包中,包含了服务端的源代码或二进制文件,开发者可以部署并配置这个服务器,以便为自己的Android应用提供推送通知服务。安装和配置过程可能涉及到设置环境变量、配置文件修改...
使用Apndroid Push Notification 实现android信息推送,AndroidPn项目是使用XMPP协议实现信息推送的一个开源项目。内涵服务端和客户端源码
该程序包修改至开源项目androidpn-server-0.0.5,携带jre7(此为windows版本,如要运行在linix,需更换为linix jre7),无需java配置运行环境,实现离线推送功能,支持推送消息有效期设置,服务端能够自主判断消息...
总之,"androidpn-tomcat-server端"为开发者提供了一个自定义推送服务的基础框架,涉及到了Java Web开发、服务器配置、网络编程等多个领域的知识,对于深入理解移动应用的后台服务有着重要的学习价值。
`androidpn-server-0.5.0`包含了服务端的源代码。服务端通常由以下几部分组成: 1. **注册接口**:当一个新的Android设备需要接收推送通知时,它会通过API向服务端注册,提供一个唯一标识(如IMEI)和接收通知的...
本资源包提供了AndroidPN服务端和客户端的源码,以及相关的部署说明,便于开发者快速理解和实现推送通知功能。 一、AndroidPN服务端 AndroidPN服务端是基于Java语言开发的,它使用了Spring框架和Hibernate ORM来...
开发者可以深入研究代码,理解其工作原理,或者根据需求进行定制和扩展,比如优化性能、增加新的功能或调整推送策略。 客户端组件: 1. androidpn-client-0.5.0.zip:这个文件包含了AndroidPN的客户端库,用于集成...
通过研究这些源代码,开发者可以学习如何实现一个完整的推送通知系统,包括客户端和服务端的交互,网络通信,以及如何在Android系统上有效地处理推送消息。这不仅可以加深对Android平台的理解,也有助于提升服务器端...
另一方面,"androidpn-server-tomcat.zip"则包含了AndroidPN服务端的部署包,这部分是基于Tomcat服务器运行的。Tomcat是Apache软件基金会的Jakarta项目下的一个开源产品,它实现了Java Servlet和JavaServer Pages...
"AndroidPN 客户端和服务端"是一个完整的推送通知服务解决方案,主要针对Android平台。这个项目包括了客户端应用程序和服务器端的实现,旨在提供实时、可靠的信息推送功能,使得应用程序能够在用户不主动打开应用的...
总之,通过分析Androidpn的源代码,开发者不仅可以学习到消息推送服务的实现,还能掌握Java Web应用的开发和部署,以及Android客户端的后台服务设计。这对于提升Android应用的用户体验,特别是实时通信功能的实现...
接下来是服务器端,`androidpn-server-0.5.0`。服务器端负责处理客户端的注册请求,存储设备ID,以及向注册的设备发送消息。其核心功能包括: 1. **用户管理**:服务器需要存储和管理每个注册客户端的信息,包括设备...
1. **异常类型定义(org.androidpn.server.xmpp)**:定义了服务器运行过程中可能遇到的各种异常情况。 2. **配置文件加载(org.androidpn.server.util)**:负责加载服务器配置文件,如主机名和端口号。 3. **XMPP协议...
androidpn服务端源代码,布署在tomcat/webapp下即可,注意修改android_xmpp_server/resources/下的jdbc.properties数据库链接为你自己环境的数据库,第一次启动时,会自动建表的,不用关心。 客户端修正了androidpn...
在这个“androidPN server端源码eclipse tomcat版”中,我们主要关注的是如何在Eclipse集成开发环境中配置和运行基于Tomcat服务器的AndroidPN服务。 首先,`androidPN`这个文件夹很可能包含了整个项目源码,包括...
二、AndroidPN服务端功能 1. **设备注册**:Android设备需要注册到AndroidPN服务器,获取一个唯一的注册ID,用于后续的消息推送。 2. **消息处理**:服务端接收来自客户端的推送消息请求,存储并处理这些消息。 3...
`org.androidpn.server.xmpp.net` 包负责维护客户端和服务端之间的持久连接,并提供了多种消息传输方式。 **6. SSL认证** `org.androidpn.server.xmpp.ssl` 包提供SSL认证功能,确保数据传输的安全性。 **7. 路由...
3) `org.androidpn.server.xmpp`包是XMPP服务器的核心,包含入口类`XmppServer`,负责启动和停止服务。 4) `auth`包处理认证,可以在此处集成自定义认证逻辑。 5) `codec`包处理XMPP协议的XML编码和解码。 6) `...
在研究这个"androidpn-server-0.5.0"源代码时,你可以关注上述各个部分,理解代码结构、类关系以及关键函数的实现,这对于自行搭建推送服务或优化现有服务都非常有帮助。同时,通过阅读源代码,你还可以学习到如何...