# 《分布式IM系统》即时通讯SDK-第02节:发送群聊消息的流程设计与实现

作者:冰河
星球: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/15iRx5OZV (opens new window)

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

  • 本节难度:★★☆☆☆
  • 本节重点:对即时通讯SDK中发送群聊消息的流程进行设计和实现,掌握SDK类库的设计和实现方法,并将其灵活应用到自身实际项目中。
  • 课程视频:https://t.zsxq.com/15iRx5OZV (opens new window)

大家好,我是冰河~~

无论是单聊还是群聊,最终都是要将消息发送到用户的终端设备上。为了保证整个分布式IM即时通讯系统的高可扩展性,并且兼顾到消息的发送性能,即时通讯SDK发送群聊消息和发送单聊消息还是有所差异的。

# 一、前言

在前面的章节中,我们已经对即时通讯SDK发送单聊消息的流程进行了设计和实现,单聊消息就是两个用户之间直接进行聊天所发送的消息。对于群聊来说,其产生的场景一个是用户在群组中聊天,再一个就是用户在聊天室中聊天,无论是群组还是聊天室,本质上都是一个用户向多个用户发送消息,那如何实现一个用户向多个用户发送消息呢?

# 二、本节诉求

对即时通讯SDK中发送群聊消息的流程进行设计和实现,通过即时通讯SDK对外封装统一的发送群聊消息的接口,大后端平台或者其他业务系统对接IM即时通讯功能时,只需要引入即时通讯SDK,调用发送群聊消息的接口,即可发送群聊消息。

# 三、流程设计

大后端平台或其他业务系统引入即时通讯SDK发送群聊消息的流程如图2-1所示。


可以看到,大后端平台或者其他业务系统引入即时通讯SDK发送群聊消息的流程如下所示。

(1)即时通讯SDK会从分布式缓存中获取群组中所有用户连接的即时通讯后端服务的ID列表。

(2)即时通讯SDK会对用户按照服务ID分组,同一个服务ID下的用户分为一组,并且会记录不在线,也就是离线的用户列表。

(3)即时通讯SDK会循环向每个服务ID对应的Topic发送消息,将消息发送到消息中间件集群。

(4)即时通讯SDK会通过广播的方式处理离线用户未读消息的ID。

(5)即时通讯后端服务会接收到消息中间件集群中的消息,并且向目标用户推送消息。

即时通讯SDK发送群聊消息,与发送单聊消息的区别如下:

(1)从分布式缓存获取即时通讯后端服务的ID时,发送群聊消息是获取群组中所有用户连接的即时通讯后端服务的ID列表,发送单聊消息只会获取与目标用户建立连接的即时通讯后端服务的ID。

(2)向消息中间件集群发送消息时,发送群聊消息需要先对用户按照即时通讯后端服务的ID进行分组,与同一个即时通讯后端服务建立连接的用户分为一组,并且会记录离线的用户列表,随后会循环向每个即时通讯后端服务ID对应的Topic发送消息,并广播处理离线用户的未读消息ID。发送单聊消息会直接向与目标用户终端建立连接的即时通讯后端服务的ID对应的Topic发送消息。

(3)即时通讯后端服务向目标用户推送消息时,无论是群聊还是单聊,都会通过目标用户的ID和终端类型,获取到与目标用户终端建立的连接,通过连接向目标用户推送消息。

# 四、类结构设计

即时通讯SDK发送群聊消息的类结构如图2-2所示。

# 查看完整文章

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