您的位置:首页 > 运维架构

openfire服务器端增加消息回执,解决openfire丢包问题

2014-12-01 16:00 721 查看

背景

我们都知道openfire丢包是比较严重的,要做即时通讯,肯定无法容忍这样的事情。为何会丢包?本人站在巨人的肩膀上,总结有两种情况:

1)客户端A发送消息到客户端B,消息经过服务器,由服务器转发给客户端B,如果客户端B不在线了,此消息则无法发送到客户端B。openfire不是有离线消息机制吗?

对,但是,用户由在线状态到离线状态大致有两种情况:

第一种情况没有问题:由用户主动发起一个下线请求(一个presence报文),服务器接收到此报文,将用户状态置为离线状态

第二种情况问题就来了:用户由于网络原因,连接断开了。这时服务器如何知道用户下线了呢?服务器肯定是没法立即知道用户已经下线了的。服务器有一个心跳检查,

如下图设置。如果一段时间之后,任然接收不到用户的响应,则释放连接使用户下线。也就是说,从用户网络断开连接,到服务器检查迫使用户下线这段时间,服务器

认为用户是在线的,这段时间发送给此用户的消息并不会走离线消息。这段时间的消息就丢包了。

参考:/article/8282488.html



2)客户端A发送消息到客户端B,发送时由于A的网络状态不稳定,导致消息并没有发送成功。(本人是服务端的开发,不慎了解客户端的具体情况,现实情况是我们的android和ios工程师均没法判断消息发送失败了),此消息客户端B是无法接收到的。对用我们的应用用户来说,他只知道我的消息发出去,但对方没收到,丢包啦!!

问题1:修改openfire离线消息机制

参考:/article/9138711.html

问题2:增加消息回执

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐