openfire多端登录和消息漫游

基于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. 同一账号,使用同一资源登录

参考:https://blog.csdn.net/jwzhangjie/article/details/12036131/

五、openfire消息漫游

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

版权声明:部分文章、图片等内容为用户发布或互联网整理而来,仅供学习参考。如有侵犯您的版权,请联系我们,将立刻删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值