IM/MS/message/TimeLine.h
2023-05-18 10:50:33 +08:00

40 lines
1.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Created by dongl on 23-5-17.
//
#ifndef IM2_TIMELINE_H
#define IM2_TIMELINE_H
/**
* Timeline模型
* 一个抽象表述Timeline可以简单理解为是一个消息队列但这个消息队列有如下特性
*
* 每个消息拥有一个顺序IDSeqId在队列后面的消息的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