专业IM即时通讯软件开发,值得信赖!

openfire多端登录和消息漫游

openfire 云聊IM 135℃

基于openfire4.3.2+smack4.3.3,版本不同可能不适用。

一、openfire如何实现多端登录

openfire默认支持多端登录,即可以使用同一个账号,登录多个客户端。

比如,在Android、iOS、PC上同时登录,只需要保证客户端的【资源】不同即可,Android指定资源为Android,iOS指定资源为iOS,PC指定资源为PC等

【资源】就是username@domain.com/resource中的resource。

如果,同一账号使用同一【资源】在多端登录,那么后登录的客户端将会把先登录的客户端“顶下线”。

使用openfire4.3.2+smack4.3.3,如果不指定【资源】,会自动生成随机【资源】,所以默认就可以多端登录了。

//生成username@domain.com/resourse
 getConnection().login("username", "password", "resourse");
//生成username@domain.com/6tr9j18eq7
 getConnection().login("username", "password");

二、openfire多端登录,收不到消息,只有一个客户端可以收到消息

openfire按如下路由规则,处理消息发送

  1. 选资源优先级最高的客户端发送消息
  2. 选在线状态具有最高等级的,openfire在线状态由高到低依次为chat-找我聊天吧、available-在线、away-离开、xa-长时间离开、dnd-不要打搅我
  3. 选最近最活跃的客户端

可以看出openfire默认是不会向多个客户端发送消息的

smack4.3.3中设置【资源】的优先级,如下

getConnection().sendStanza(new Presence(Presence.Type.available, "在线", 1, Presence.Mode.available));

三、openfire多端登录,多端都收到消息怎么实现?

  1. 保证客户端的【资源】不同
  2. 在openfire管理后台Server->Server Manager->System Properties中添加一个新的属性:route.all-resources=true
  3. 将客户端的连接都设置为最高优先级
  4. 在发送消息时,不指定【资源】

四、openfire多端互踢如何实现

这和openfire的另一个配置:xmpp.session.conflict-limit有关

同一账号,同一【资源】多端登录。openfire会判断当前服务器中是否存在session。无则直接创建session。

如果有,再判断是否大于xmpp.session.conflict-limit,若大于,就直接把之前的session给剔除。

若小于xmpp.session.conflict-limit openfire不会剔除session,但会发送错误信息,session保持链接。

xmpp.session.conflict-limit=-1 表示永不互踢。

所以,实现openfire多端互踢需要

  1. 设置xmpp.session.conflict-limit=0
  2. 同一账号,使用同一资源登录

五、openfire消息漫游

openfire暂不支持消息漫游。如需实现消息漫游可参考:http://www.yunliaoim.com/im/4576.html

喜欢 (0)
仿微信聊天软件开发