Android端服务器推送技术原理分析及XMPP的使用
2012-11-07 14:55:25 来源:WEB开发网核心提示:pn消息推送采用的是apache的mina框架做的,服务端和客户端两边都有监听,也就是我们所说的socket编程,有人说socket编程有什么难的,就那么回事,其实不然,我们平时写的socket聊天都只是在局域网的,但是要穿透路由和防火墙,让信息安全及时的传送到另一个网关的局域网电脑中,就不是一件简单的活了,其中涉及到
pn消息推送采用的是apache的mina框架做的,服务端和客户端两边都有监听,也就是我们所说的socket编程,有人说socket编程有什么难的,就那么回事,其实不然,我们平时写的socket聊天都只是在局域网的,但是要穿透路由和防火墙,让信息安全及时的传送到另一个网关的局域网电脑中,就不是一件简单的活了,其中涉及到在nat上打洞,还有线程,断网重连,安全加密等等,那么androidpn配合mina相当于把这些活都干了,那么我们要的干活就相对比较精细了,第一学习mina的安装配置的规则,第二学习xmpp协议组装和解析的规则,第三学习androidpn推和收消息的核心代码,如此三点我们便能灵活驾驭住androidpn出现再大的问题自己也能动手去调了。在和spring整合的时候大家要注意不要让mina服务启动2次,笔者整合时候无意发现在linux64位系统,weblogic上启动时候总是报5222已经被占用,反复查看代码发现mina在随web容器启动过一次5222端口后,xmppserver类中的start方法中ClassPathXmlApplicationContext类又加载了一次spring配置,导致端口被重复开启两次,后来将spring配置重新修了下,保证配置了mina的xml只被加载一次,在相同加载模式下spring的bean单例确实不会重复创建,但是ClassPathXmlApplicationContext加载模式必定会导致mina端口实例连同所有实例重新被加载,毕竟不在一个内存中管理,统一管理即可解决问题!网上现在也有不少androidpn版本,五花八门什么都有,里面到底有没问题,改了什么没改什么都不知道,基本上已经追溯不到原创到底是谁了,索性就只能从国外的一个网站上下了一个比较可靠的版本自己动手去量身改造,终于出了一个比较稳定版本。而且笔者把离线消息也做了进去,用户只要没收到提醒,当他恢复连接时离线消息就会被推送过来。
对于消息提醒来说,它仅仅是个notification,许多人非要把业务数据也做进去,更有夸张好几兆的xml数据就这么硬塞提醒过去,这种做法本身就背离了设计的初衷,非要把跑车当牛车使能不出问题吗?其实业务数据还是用http拉比较好,xmpp及时的前提是用资源消耗作为代价的,我们能适度就适度用,用好用稳就行!如果这样就结束了还不算太华丽,笔者教大家如何将自己家里的局域网电脑免费发布到外网作为服务器,或者你有了答案,申请个花生壳账户就可以送一个免费的域名,将花生壳域名客户端在你的客户端启动起来,然后打开你的路由管理,在转发规则中->虚拟服务器->添加新条目,服务器端口号填写5222 ip填写你的内网地址,再添加一个条目,服务器端口填写你的中间件端口,我的是8080,ip填写你的内网地址,最后重启路由,好了现在把你的花生壳域名输入到浏览器 xxx.xicp.net:8080/xxx 就可以随时随地在外网使用消息推服务了,最后将你的手机端配置改成花生壳域名xxx.xicp.net,就可以收到消息。
搭建步骤:
1.android端找到res/raw/androidpn.properties文件修改服务器ip地址,不要写localhost,写绝对ip地址
2.服务端找到resources/jdbc.properties 在mysql中新建一个数据库apn,并将连接指向该库,设置用户名和密码,库表会随服务启动的时候自动创建
3.先启动服务,再打开android客户端,点击连接即可
更多精彩
赞助商链接