# 《分布式IM系统》即时通讯后端服务-第06节:即时通讯后端服务单聊处理器的设计与实现

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)
课程视频:https://t.zsxq.com/15z05Tfy0 (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本节难度:★★☆☆☆
  • 本节重点:对即时通讯后端服务的单聊处理器进行设计和实现,并对用户终端发送单聊消息的流程进行设计,掌握消息处理器的设计方法和落地实现方案。并能够将其灵活应用到自身实际项目中。
  • 课程视频:https://t.zsxq.com/15z05Tfy0 (opens new window)

大家好,我是冰河~~

分布式IM即时通讯系统一个非常重要的功能就是要实现用户与用户之间的单聊消息。也就是一个用户可以和另一个用户直接进行点对点聊天。但是,在聊天消息的处理细节上,与登录消息和心跳消息还是有所差别的。

# 一、前言

用户通过终端登录分布式IM即时通讯系统后,向另一个用户发送消息时,消息数据会通过大后端平台集成的即时通讯SDK发往消息中间件集群,即时通讯后端服务会监听消息中间件集群中的消息数据,并获取与用户终端建立的连接,通过与用户终端建立的连接向用户发送消息。

# 二、本节诉求

对即时通讯后端服务的单聊处理器进行设计和实现,并对用户终端发送单聊消息的流程进行设计,最终实现即时通讯后端服务通过消息处理器处理单聊消息的逻辑。

# 三、流程设计

分布式IM即时通讯系统的架构设计,大家回顾下总体架构篇章的《第01节:分布式IM即时通讯系统总体方案目标与架构设计》 (opens new window) ,这里不再赘述。

单聊就是在分布式IM即时通讯系统中,一个用户直接与另外一个用户聊天,也就是一对一的聊天。在这种场景下,很有可能单聊的两个用户中,出现用户不在线的情况。例如,用户A给用户B发送消息时,用户B可能不在线。此时,我们就需要将用户A向用户B发送的消息存储起来。其实,在我们实现的分布式IM即时通讯系统中,无论把用户B是否在线,都会存储消息记录。当用户B登录系统后,将消息同步给用户B。

单聊消息的执行流程如图6-1所示。


可以看到,用户A向用户B发送消息时,如果用户B在线,就可以按照发送消息的交互链路向用户B发送消息了。如果用户B不在线,此时就无法向用户B正常推送消息。当用户B登录分布式IM即时通讯系统后,就会调用后端平台的接口拉取所有未读消息,并通过用户B在线流程向用户B推送消息。

# 四、类结构设计

有了前面对代码的扩展性设计,加入单聊的类结构设计也比较简单,如图6-2所示。

# 查看全文

加入冰河技术 (opens new window)知识星球,解锁完整技术文章与完整代码