我们网站要用到即时通讯,选择了OPENFIRE 当做服务器。
OPENFIRE实现了XMPP部分协议。通过发送xml标签进行和服务器的交互。
前端采用的是strophe 。开发过程中,发现假如新开一个页面,会把其他页面的session顶掉,需要在openfire添加一条系统属性
route.all-resources true
这样其他页面既不会掉线,也实现了消息的分发同步。缺点是比较消耗服务器资源,新开一个页面就发起一个新连接,其他解决方案也试过,不能解决这个问题,strophe的attach方法不实用。
开发过程中,刚开始我把所有逻辑都写在前端的,聊天室创建和加入,PubSub节点的创建和加入,消息提醒的发送。
而strophe是依赖于flash的,假如客户端没有flash就会影响其他用户后续使用,所以把接受消息用strophe,发送、创建放在后端才合理。
strophe使用过程中注意添加的监听事件想要每次都执行,必须return true.
后端采用的是JAXL这个插件,看着不错,开发起来发现调试错误文不对题,只能一行行注释查看。最好把它的日志记录方式改改,还有异常也得改改,方便调试。
JAXL还有个问题,使用send方法的时候,有些生成的xml标签明明正确的也报错,这时候最好使用send_raw,发送的xml标签也是字符串的,不要使用JAXL的函数生成的,一是很麻烦,而且还有可能出现莫名其妙的错误。
事件开发中主要是看XMPP协议文档,出现问题找谷歌、*,中文的基本上找不到答案。
本来想好要写的东西很多,结果发现能写下来的就这么些有点乱,想到哪儿写到哪儿,代码细节的东西太多,就不贴了。前后差不多1一个月,即时通讯这块搞的差不多了。
有问题可以留言。