40 lines
1.7 KiB
C++
40 lines
1.7 KiB
C++
//
|
||
// Created by dongl on 23-5-17.
|
||
//
|
||
|
||
#ifndef IM2_TIMELINE_H
|
||
#define IM2_TIMELINE_H
|
||
|
||
/**
|
||
* Timeline模型
|
||
* 一个抽象表述,Timeline可以简单理解为是一个消息队列,但这个消息队列有如下特性:
|
||
*
|
||
* 每个消息拥有一个顺序ID(SeqId),在队列后面的消息的SeqId一定比前面的消息的SeqId大,也就是保证SeqId一定是增长的,但是不要求严格递增;
|
||
* 新的消息永远在尾部添加,保证新的消息的SeqId永远比已经存在队列中的消息都大;
|
||
* 可根据SeqId随机定位到具体的某条消息进行读取,也可以任意读取某个给定范围内的所有消息。
|
||
*/
|
||
|
||
/**
|
||
* 消息同步
|
||
*
|
||
* 有了这些特性后,消息的同步可以拿Timeline来很简单的实现。图中的例子中,消息发送方是A,消息接收方是B,同时B存在多个接收端,分别是B1、B2和B3。
|
||
* A向B发送消息,消息需要同步到B的多个端,待同步的消息通过一个Timeline来进行交换。A向B发送的所有消息,都会保存在这个Timeline中,
|
||
* B的每个接收端都是独立的从这个Timeline中拉取消息。每个接收端同步完毕后,都会在本地记录下最新同步到的消息的SeqId,即最新的一个位点,
|
||
* 作为下次消息同步的起始位点。服务端不会保存各个端的同步状态,各个端均可以在任意时间从任意点开始拉取消息。
|
||
*/
|
||
|
||
/**
|
||
* 消息漫游
|
||
* 也是基于Timeline,
|
||
* 和消息同步唯一的区别是,消息漫游要求服务端能够对Timeline内的所有数据进行 持久化。
|
||
*/
|
||
|
||
/// 每个会话 通过 TimeLine 维护
|
||
|
||
class TimeLine {
|
||
|
||
};
|
||
|
||
|
||
#endif //IM2_TIMELINE_H
|