public class QoS4ReciveDaemonRoot
extends java.lang.Object
当前QoS机制支持全部的C2C、C2S、S2C共3种消息交互场景下的消息送达质量保证:
原理是:当收到需QoS机制支持消息包时,会把它的唯一特征码(即指纹id)
存放于本类的“已收到”消息队列中,寿命约为 MESSAGES_VALID_TIME
指明
的时间,每当CHECH_INTERVAL
定时检查间隔到来时会对其存活期进行检查
,超期将被移除,否则允许其继续存活。理论情况下,一个包的最大寿命不可能超过2
倍的 CHECH_INTERVAL
时长。
补充说明:“超期”即意味着对方要么已收到应答包(这是QoS机制正
常情况下的表现)而无需再次重传、要么是已经达到QoS机制的重试极限而无可能再收
到重复包(那么在本类列表中该表也就没有必要再记录了)。总之,“超期”是队列中
这些消息包的正常生命周期的终止,无需过多解读。
本类存在的意义在于:极端情况下QoS机制中存在因网络丢包导致应答包的 丢失而触发重传机制从而导致消息重复,而本类将维护一个有限时间段内收到的所有 需要QoS支持的消息的指纹列表且提供“重复性”判断机制,从而保证应用层绝不会因为 QoS的重传机制而导致重复收到消息的情况。
当前MobileIMSDK的QoS机制支持全部的C2C、C2S、S2C共3种消息交互场景下的 消息送达质量保证.
本线程的启停,目前属于MobileIMSDK算法的一部分,暂时无需也不建议由应用层自行调用。
构造器和说明 |
---|
QoS4ReciveDaemonRoot(int CHECH_INTERVAL,
int MESSAGES_VALID_TIME,
boolean DEBUG,
java.lang.String debugTag) |
限定符和类型 | 方法和说明 |
---|---|
void |
addRecieved(Protocal p)
向列表中加入一个包的特征指纹。
|
void |
addRecieved(java.lang.String fingerPrintOfProtocal)
向列表中加入一个包的特征指纹。
|
boolean |
hasRecieved(java.lang.String fingerPrintOfProtocal)
指定指纹码的Protocal是否已经收到过.
|
boolean |
isDebugable() |
boolean |
isRunning()
线程是否正在运行中。
|
QoS4ReciveDaemonRoot |
setDebugable(boolean debugable) |
int |
size()
当前“已收到消息”队列列表的大小.
|
void |
startup()
启动线程。
|
void |
stop()
无条件中断本线程的运行。
|
public QoS4ReciveDaemonRoot(int CHECH_INTERVAL, int MESSAGES_VALID_TIME, boolean DEBUG, java.lang.String debugTag)
public void startup()
无论本方法调用前线程是否已经在运行中,都会尝试首先调用 stop()
方法,
以便确保线程被启动前是真正处于停止状态,这也意味着可无害调用本方法。
本线程的启停,目前属于MobileIMSDK算法的一部分,暂时无需也不建议由应用层自行调用。
public void stop()
本线程的启停,目前属于MobileIMSDK算法的一部分,暂时无需也不建议由应用层自行调用。
public boolean isRunning()
public void addRecieved(Protocal p)
本方法的调用,目前属于MobileIMSDK算法的一部分,暂时无需也不建议由应用层自行调用。
p
- addRecieved(String)
public void addRecieved(java.lang.String fingerPrintOfProtocal)
本方法的调用,目前属于MobileIMSDK算法的一部分,暂时无需也不建议由应用层自行调用。
fingerPrintOfProtocal
- 消息包的特纹特征码(理论上是唯一的)putImpl(String)
public boolean hasRecieved(java.lang.String fingerPrintOfProtocal)
此方法用于QoS机制中在防止因网络丢包导致对方未收到应答时而再次发送消息从而导致消息重复时的判断依赖.
fingerPrintOfProtocal
- 消息包的特纹特征码(理论上是唯一的)public int size()
ArrayList.size()
public QoS4ReciveDaemonRoot setDebugable(boolean debugable)
public boolean isDebugable()