上篇讲了androidpn的client端,这篇该讲一下我使用androidpn-server端的笔记了。
这里我使用的androidpn是tomcat版的,由不知哪位大神移植并修复了部分bug的版本。地址在:https://github.com/msdx/androidpn/tree/master/androidpn-server-bin-tomcat。直接在eclipse-j2ee中导入就可以了。
在我fork的这个项目里,我主要修改了一点小问题。
1、客户端断网或关机时,服务端session没关闭的问题。
参照网上的方法,修改了org/androidpn/server/xmpp/net/XmppIoHandler.java的sessionCreated方法,添加了一句:
session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 180);见:https://github.com/msdx/androidpn/commit/1d654a8459648273df1a1654a5e8d8d7ff37d770
2、log文件名的拼写错误。
这个是在resources/log4j.xml中配置中,把<param name="File" value="../logs/adnroidpn.log" />改为<param name="File" value="../logs/androidpn.log" />即可。
不过后来为了把它的log与tomcat的log区分开来,我又配置为把它们放在logs/androidpn的文件夹里。修改见:https://github.com/msdx/androidpn/commit/77671ad66f299fbbe0991fece190ed67109b05b0和https://github.com/msdx/androidpn/commit/a661180d169112ea41606ea7ef6c7d59286e5cc6。
3、增加离线消息发送和回执处理。此处代码修改较多:https://github.com/msdx/androidpn/commit/e41f3b069f63fb571844424498787ffb3ae67c94
此版本的server需对应有发送回执功能的客户端,否则会导致服务端每次收到心跳包都会下发它认为对方没有收到的消息(由于客户端未能发给它回执)。客户端见我另一个项目的更新:APNBB