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

背景

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

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

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

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

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

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

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

参考:http://blog.youkuaiyun.com/yjl49/article/details/6833606

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

 

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

参考:http://blog.youkuaiyun.com/kaixinwoo5/article/details/37320579

 

问题2:增加消息回执

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值