随笔分类 -  openfire

JAVA 笔记 ClassLoader.getResourceAsStream() 与 Class.getResourceAsStream()的区别
摘要:Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致。 例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.class.getResourceAsStream("name") 会在com.test.mycode包下查找相应的资源。 如果这个name是以 '/' 开头的,那么就会从classpath的根路径下开始查找。 ClassLoader.getResourceAsStream() 无论要查找的资源前面是否带'/' 都会从classpath的根路径下查找。 阅读全文

posted @ 2012-08-08 16:19 心笑峰 阅读(34868) 评论(3) 推荐(5) 编辑

一个S2S通信中的同步、异步问题的解决
摘要:最近在搞Openfire S2S时遇到了一个数据通信时的同步与异步问题。具体描述如下: OF中的基本通信结构如下: 客户端与服务器的通信是同步的,服务器与服务器之间的通信却是异步的:客户端发送一个请求后就会阻塞一段时间,等待服务器的响应;服务器之间则采用消息通知的方式异步交流数据。 所以会出现下面这种情况: 客户端发送消息给服务器A,消息经入口路由到相应的功能模块进行处理,而此时需要从B服务器中获取一些额外的数据,比如验证发送上来的账号是否在另外的服务器有注册。一般情况下数据在本地的话就直接查找处理再给用户返回就行,但在其它服务器时直接返回就会出现结果错误或不完整,不返回则造成客户端超时。 . 阅读全文

posted @ 2011-12-22 17:57 心笑峰 阅读(610) 评论(0) 推荐(0) 编辑

Openfire Could not locate home
摘要:Openfire 开发环境搭建时容易出现Couldnotlocatehome 异常,主要由XMPPServer.java中以下代码引起:private void initialize() FileNotFoundException{ locateOpenfire(); ......}private void locateOpenfire() throws FileNotFoundException{ String jiveConfigName = "conf" + File.separator + "openfire.xml"; // First... 阅读全文

posted @ 2011-12-13 12:38 心笑峰 阅读(3939) 评论(1) 推荐(0) 编辑

Openfire Monitoring/jinglenodes plugin error
摘要:运行Openfire 后出现以下报错:Error loading plugin: C:\Program Files\Openfire\plugins\monitoring java.lang.NoClassDefFoundError: org/picocontainer/MutablePicoContainer at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) at java.lang.Cl... 阅读全文

posted @ 2011-12-08 17:07 心笑峰 阅读(2186) 评论(0) 推荐(0) 编辑

Openfire S2S 连接建立与消息发送
摘要:发送给其它服务器的消息由@domain 部分区分,在进入到服务器路由后在RoutingTableImpl.routePacket(Packet packet) 中与发送给本地服务器的消息分离。public void routePacket(JID jid,......){ boolean routed = false; if(serverName.equals(jid.getDomain())){ routed = routeToLocalDomain(jid,packet,fromServer); } else if(jid.getDomain().contain... 阅读全文

posted @ 2011-12-02 12:54 心笑峰 阅读(1240) 评论(0) 推荐(0) 编辑

Openfire S2S 监听与消息处理
摘要:Openfire中Server to Server 连接默认使用5269 端口,在管理员后台的Server-->Server Settings --> Server to Server 页面有相应的配置项。首先看Service Enable 项: 在用户选择了 Enabled 填写监听端口 提交后在jsp页面里调用的是ConnectionManager相应的方法:ConnectionManager connectionManager = XMPPServer.getInstance().getConnectionManager(); connectionManager.enable 阅读全文

posted @ 2011-12-01 19:18 心笑峰 阅读(1576) 评论(0) 推荐(0) 编辑

Openfire MultiUserChat 多用户聊天 ---消息发送
摘要:创建好了Chat room 后就可以通过邀请或用户主动加入的方式添加成员。过程与创建聊天室的相似,不用点在于聊天室已存在,不需要再重新创建,只需将当前用户加入即可。用户发送聊天消息是直接发送给Chat room 的,再由Chat Room转发给所有用户。详细时序图如下: 阅读全文

posted @ 2011-11-10 12:00 心笑峰 阅读(1836) 评论(0) 推荐(0) 编辑

Openfire MultiUserChat 多用户聊天 ---创建聊天室
摘要:用户发送查询iq消息后,再发送presence消息创建聊天室:<presence id="8Li34-12" to="roomname@conference.myserver/clientA"> <x xmlns="http://jabber.org/protocol/muc"></x> </presence> 处理的时序图如下:1. 用户发送的presence 消息被路由到ChatService中处理。2.ChatService中保存有一张本地聊天室中所有用户的视图,如果用户之前已经加 阅读全文

posted @ 2011-11-08 21:10 心笑峰 阅读(8519) 评论(0) 推荐(0) 编辑

Openfire 好友状态的发送(用户登录)
摘要:客户端在登录 Openfire 时都会收到自己订阅的好友状态,那么这个好友状态是怎么下发下去的呢? 用户在登录后会发送一个<presence> 来更新自己的状态,在PresenceRouter 中进行处理。这个presence 交由PresenceUpdateHandler 处理,在判断用户为注册用户后使用RosterManager.getRoster() 来获取所有已经订阅的其他用户。针对每个用户判断关系类型,如果为SUB_FROM,SUB_BOTH 则说明此用户为订阅了自己的。 先向订阅了自己的用户广播状态更新消息。调用initSesion(),从中取出SUB关糸为SUB_TO 阅读全文

posted @ 2011-10-21 18:01 心笑峰 阅读(3638) 评论(0) 推荐(0) 编辑

Openfire 的 Cache机制
摘要:Openfire 中多处用到了Cache 来存储那些访问较为频繁的数据,例如userManager中的userCache,rosterManager 中的rosterCache。以下为Openfire中Cache的实现机制:1. Cache 接口:interface Cache<K,V> extends java.util.Map<K,V>提供了基本的Cache接口方法。2. Cacheable 接口:interface Cacheable extends java.io.Serializable继承了序列化接口,如果是自己定义的数据需要存储在Cache中,则需要实现此 阅读全文

posted @ 2011-10-08 22:31 心笑峰 阅读(3849) 评论(0) 推荐(0) 编辑

导航