# 《分布式IM系统》大后端平台-消息服务-第09节:图片、文件和语音消息的设计和实现

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

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

  • 本节难度:★★☆☆☆
  • 本节重点:对通用文件的上传功能进行设计和实现,从源码级别掌握文件上传到Minio文件系统的流程,重点理解用户上传文件的流程,以及在消息发送过程中文件的随消息的流转过程,结合自身实际项目思考,将本节学到的知识灵活应用到自身实际项目中。
  • 课程视频:https://t.zsxq.com/17xS9Efld (opens new window)

大家好,我是冰河~~

不知道小伙伴们有没有发现这样一个问题,目前我们实现的大后端平台的消息微服务虽然能够实现单聊消息和群聊消息的发送流程和拉取流程,也能够实现消息的未读和已读功能,还能够实现消息的撤回。但是,到目前为止,没看到在分布式IM即时通讯系统中如何发送图片、文件、语音功能呀,那怎么实现呢?

# 一、前言

对于分布式IM即时通讯系统来说,在设计上支持的消息类型涵盖:文字、图片、文件、语音、视频,也就是说,在我们实现的分布式IM即时通讯系统中,可以发送文字、图片、文件、语音、视频。目前,我们已经实现了文字消息的发送、拉取、未读、已读和撤回功能。那图片、文件、语音、视频类型的消息如何处理呢?

# 二、功能描述

文字消息比较简单,目前我们已经在分布式IM即时通讯系统中实现了文字消息的流转过程,也就是说,你可以在分布式IM即时通讯系统中顺畅的发送和撤回文字消息了。

对与其他类型的消息来说,我们可以将图片、文件、语音归为一类,这类消息在实现时,我们可以将图片、文件、语音上传到Minio文件系统,随后图片、文件和语音的链接随消息进行流转,当用户收到图片、文件和语音类型的消息时,从Minio文件系统中拉取消息即可。

而视频类型的消息,则需要通过实时推送和接收视频流来实现。

# 三、流程设计

针对图片、文件、语音类型的消息,在流程设计上,我还是分成单聊消息流程和群聊消息流程进行讲解。

# 3.1 单聊消息流程

单聊场景发送图片、文件、语音类型的消息流程如图9-1所示。


可以看到,整体流程还是比较简单的,主要涉及到用户及其好友、消息微服务、消息库、即时通讯SDK、消息中间件、即时通讯后端服务等

# 查看完整文章

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