# 《分布式IM系统》需求设计-第03节:分布式IM即时通讯系统功能需求与流程梳理

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

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

  • 本章难度:★★☆☆☆
  • 本章重点:正所谓磨刀不误砍柴功,在真正研发分布式IM即时通讯系统之前,我们需要梳理好分布式IM即时通讯系统的需求与业务流程,本章,我们就一起全面梳理分布式IM即时通讯系统的需求与业务流程。
  • 课程视频:https://t.zsxq.com/149IP0Ctv (opens new window)

大家好,我是冰河~~

无论是开发互联网项目,例如开发分布式IM即时通讯系统、分布式秒杀系统、分布式电商平台等等,还是开发传统软件项目,例如开发人事管理系统、报表系统等等,亦或是开发其他外包项目。研发人员接收到任务后,第一时间不是进行系统设计,更不是一开始就干代码,而是先要好好梳理下系统的需求和业务流程,任何技术和框架最终都是服务于业务的。

# 一、前言

大家应该对IM即时通讯系统都不陌生了,像腾讯的微信、QQ,阿里的钉钉等,都是非常典型的IM即时通讯软件。站在普通用户的角度理解,这些都能实现聊天、发送图片、文件、语音、视频、加好友、创建群、加群等等。但是,作为我们技术人员,是不能这么简单的理解的。我们需要从技术和业务的角度来梳理分布式IM即时通讯系统的业务和流程,以便从技术和业务的角度来更好的实现分布式IM即时通讯系统。

# 二、本章诉求

研发人员接收到任务后,切记不要一上来就干代码,不然中途你多多少少都会遇到这种情况:开发到中途,突然卡住了,不知道接下来的需求和业务是什么了,也不知道如何继续向下开发了。或者开发到中途时,发现自己对需求和业务的理解有偏差,再回过头来梳理需求和业务流程,得不偿失。如果自己做的功能与需求不符,可能还要将之前开发的功能推倒重来,最终做了很多无用功,浪费时间和精力。

# 三、需求描述

分析IM即时通讯系统的需求时,我们可以从总体业务上进行考虑,可以将整个分布式IM通讯系统的业务以消息和用户进行划分。也就是说,总体业务上,分布式IM系统就是对消息的管理和对用户的管理,这两个功能也是分布式IM通讯系统中,最基础和最核心的功能。另外,就扩展性而言,分布式IM通讯系统需要提供SDK供其他业务系统接入,并且需要对接OpenAI大模型。

# 3.1 消息管理需求

对于一个IM即时通讯系统来说,最基础、也是最核心的功能之一就是线上聊天,也就是满足人与人之间在网上的沟通和交流。既然核心功能是聊天,就要考虑聊天的形式是什么,像发送文字、图片、文件、语音、视频等等,这些都是聊天的形式。在用户聊天时,难免有些用户不在线,这就要考虑用户是否在线,从而引申出消息缓存的需求。当用户发出消息后,怎么知道对方有没有阅读过消息呢?这又涉及到消息已读和未读的问题,那用户需要查看以前的消息记录怎么办?这就又涉及到历史消息的问题。

另外,对于聊天来说,我们还要考虑是两个用户彼此之间直接聊天?还是多人一起聊天呢?这就又涉及到单聊和群聊的问题了。所以,针对聊天本身来说,我们能够大体梳理出如下功能需求,如图3-1所示。


可以看到,针对聊天本身来说,最核心的需求就是:发送文字、图片、文件、语音、视频、消息缓存、消息未读、已读、撤回,历史消息、单聊、群聊,以及其他一些需求。

# 3.2 用户管理需求

分布式IM即时通讯系统另一个最基础,也是最核心的功能就是对用户的管理,对于用户本身来说,可以将其他的用户添加为自己的好友,也可以删除自己的好友。如果用户不想同时只和另外一个用户直接聊天,想同时与其他多个用户聊天,那么他可以创建一个群,将其他用户拉进群,他也可以将某个用户踢出群,解散群,填写群公告,修改群备注,查看群成员等。而其他用户也可以加群,退出群,查看群成员、修改自己在群内的昵称等等功能。这样一来,我们也大致梳理出了分布式IM即时通讯系统对用户管理的需求,如图3-2所示。

# 查看完整文章

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