备注:实现这个功能折腾了一天,调出了一个简单的雏形,在这里总结下
这里我大概的讲下openfire相关的各个部分的功能,
一:openfire 简单来说,OpenFire是一个采用纯Java语言编写(核心架构使用Mina构建)的开源RTC(Real-Time Communications,实时协作)服务器。它采用XMPP协议进行分布式通信,该协议的前身其实就是基于Jabber协议,只不过XMPP对其进行了部分扩展。说到底XMPP协议无非就是一个基于TCP/IP协议的扩展协议,它采用XML的方式进行数据传输,以此满足体系结构的中立。
二:Spark是利用Smack API进行与OpenFire服务器通信的客户端程序,而Smack就是提供给开发人员使用的基于XMPP协议的API。
具体介绍可以参考:http://gao-xianglong.iteye.com/blog/1944234 这篇文章
三:客户端程序 很多时候,我们往往需要开发自己的基于XMPP协议的客户端与OpenFire进行通信,这时候我们则不会再使用Spark了。客户端可以是桌面应用,也可以是移动应用,但无论是那种客户端,使用的协议都是基于XMPP的,所以充分利用Smack API完全开发出与OpenFire服务器通信的客户端程序。
这里我尝试着实现一个js客户端调用服务端的例子。
先说下我这里的环境:
windows环境+eclipse+tomcat6(客户端代码我部署在了这个上面 端口8080)+openfire服务器(这个我是通过源码启动的)
1:起初我采用的方案是:jsjac+jquery+JabberHTTPBind+Openfire
具体参考:http://www.blogjava.net/hoojo/archive/2012/08/13/385360.html
不过我的没能成功通信,由于时间问题没有具体去研究什么原因,我这里JabberHTTPBind直接把类复制了进去,没有打成jar包这样便于调试。后期我会抽时间看看这里没能成功通信的原因。
2:后来我采用的方案是:strophe+jquery+openfire+ngix
这个方案我调通了。这个地方可以参考官方下载下来包中的excample中的js和html文件,不过记得自己需要修改下js文件里面的
var BOSH_SERVICE = 'http://127.0.0.1/http-bind';
这个变量声明要写成自己的openfire服务器所在的域名(我这里的openfire是在eclipse里面通过源码启动的)
参考地址:
strophe官网:http://strophe.im/strophejs/
网友写的一篇相关文章:http://blog.youkuaiyun.com/xiao__gui/article/details/42642573
安装的步骤基本相差不多,我这里只提下几点注意事项,自己遇到的。
NOTE1:openfire服务器安装的时候,配置域名的地方尽量配置为自己的ip,这个后面客户端连接服务器的时候要用到。
NOTE2:strophe客户端代码编写完成后记得检查下是否修改了本地的BOSH服务器地址。(这里的代码我是简单修改了下官方example中的代码)
NOTE3:使用openfire的话记得把http绑定打开,还有就是让BOSH访问有效。
NOTE4:在输入用户名,密码访问openfire服务器的时候需要使用用户名@openfire域名(webspark_test01@zz-rdc-00545)的形式来访问才能被服务器识别。
起初的时候我没有用ngix,怎么访问都没法成功连接,js访问报一下错误
echobot.html:1 XMLHttpRequest cannot load http://127.0.0.1:7070/http-bind. Response for preflight is invalid (redirect)
这个时候看到了这么个文章:http://kazge.com/archives/951.html
我便尝试使用ngix,在ngix的配置目录下nginx-1.10.0\conf找到nginx.conf文件在server配置项下添加以下内容
- location / {
- proxy_pass http://127.0.0.1:8080/;
- }
- location /http-bind {
- proxy_pass http://127.0.0.1:7070/http-bind/;
- proxy_buffering off;
- proxy_redirect off;
- proxy_read_timeout 120;
- proxy_connect_timeout 120;
- }
ngix成功启动后可以在nginx-1.10.0\logs目录中查看进程pid和相关日志。
以上的配置都完成后,可以登录spark,然后js客户端联合测试下,我这边可以调通。