alberliu / gim

golang写的IM服务器(服务组件形式)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

消息顺序性问题

liststream opened this issue · comments

看文档描述:"每个用户都会维护一个自增的序列号,当用户A给用户B发送消息是,首先会获取A的最大序列号,设置为这条消息的seq,持久化到用户A的消息列表, 再通过长连接下发到用户A账号登录的所有设备,再获取用户B的最大序列号,设置为这条消息的seq,持久化到用户B的消息列表,再通过长连接下发 到用户B账号登录的所有设备。"

这里有个疑问:
A-》B发两条消息,seq为12,13
持久化到A消息列表假如是12,13
持久化到B消息列表采用的是B的序列号,这里如何报证A发的消息顺序性呢?假如B先收到13这条消息,获取最大序列号20赋给13这条消息。这样B客户端获取消息时岂不是13显示在前面,12显示在后面呢?跟A发送的顺序不一样了

commented

这里极限情况下确实可能出现这样的问题,但是这样的问题出现的概率极低,暂时不打算做处理