说明:简单记录调研过程,XMPP协议下即时通信工具的编译和使用时遇到的问题,服务端使用openfire,客户端使用Spark (Win)和Converse.js(Web端),安卓端使用的时Smack,此处没写安卓端,因为是其他人负责的:)
服务端openfire
编译过程参考IntelliJ IDEA openfire 使用IntelliJ IDEA 部署OPENFIRE 服务端
遇到的问题如下:
Error:(126, 39) java: 找不到符号
符号: 方法 getTimeStamp()
位置: 类型为org.apache.log4j.spi.LoggingEvent的变量 event
解决:项目中log4j.jar有多个,最先加载的是openfire\src\plugins,将其版本改为1.2.16即可。
Error:(159, 50) java: 找不到符号
符号: 方法 asBareJID()
位置: 类 org.xmpp.packet.JID
解决:项目中的tinder.jar为1.3.0-SNAPSHOT,将其替换为1.3.0即可
Error:(571, 21) java: 无法访问org.apache.tools.ant.Task
找不到org.apache.tools.ant.Task的类文件
解决:给openfire添加ant.jar
HTTP ERROR 500
Problem accessing /setup/index.jsp. Reason:
Server Error
Caused by:
java.lang.NullPointerException at org.jivesoftware.admin.AdminConsole.getAppName(AdminConsole.java:105) at org.jivesoftware.openfire.admin.decorators.setup_jsp._jspService(setup_jsp.java:192) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) ......
解决:把admin-sidebar.xml(在openfires\src\resources\jar目录中)复制到out或者make的相关目录下
中文乱码
解决:将openfire_i18n_zh_CN.properties
从target
复制到out
上,或者直接将配置文件openfire_i18n_zh_CN.properties
转码,执行
native2ascii openfire_i18n_zh_CN.properties.old openfire_i18n_zh_CN.properties
配置
参考Openfire 的安装和配置,下图为控制台访问路径的设置。
添加插件
可以参考 openfire插件开发,或者 跟我一步一步开发自己的Openfire插件
主要是在plugins
目录下编写代码,在build下添加build.properties
,然后执行ant plugin,会自动生成jar包。
#插件目录名
plugin=helloworld
客戶端
不同的客户端能接受消息,退出时也会通知其他客户端,但发送的消息不可见,如Spark和Converse.js。
如果想通过本地域名访问,可以在C:\Windows\System32\drivers\etc\hosts
添加域名映射,即
#....
127.0.0.1 wang #配置控制台访问路径时设置的值