现在 IM 系统已经不仅限于文本消息的通讯了,多媒体数据占据越来越多的比重,比如:文件传输、语音通话、视频通话等。
在前面的文章(《基于需求分析模型来结构化剖析 IM 系统》)中我们分析过,“多媒体消息” 属于扩展功能需求,“点对点私信消息” 属于基础功能需求,扩展功能以基础功能为基础,基础功能稳定实现后,开发扩展功能是非常简单和快速的事情。今天我们分析一下 IM 系统的文件传输和语音通话功能关键逻辑实现,内容不复杂。
在前面关于分层架构 IM 系统所有文章的描述中,客户端与服务端之间的通讯一直是基于一条 TCP 连接进行的,也就是单通道通讯。其实,在一个具备多种功能的 IM 产品中,前后端的通讯往往都是基于多通道的,也就是每个客户端与服务端之间会建立多条连接(可能是 TCP 协议、也肯能是 HTTP 协议,还可能是 WebSocket 协议),为什么要这样设计呢?
首先,每个通道传输自己专属的数据,避免通道之间相互影响,产生阻塞或延迟,尤其是文本消息数据,需要一个专属的通讯通道;我们知道多媒体数据往往会占用较大空间,如果通过文本消息通道传输多媒体数据的话,很容易影响文本消息的及时性和可靠性。
其次,每个通道传输自己专属的数据,这从底层逻辑上就解耦了逻辑关联,降低了整个系统实现的复杂性;我们在前面的文章(《架构师晋级:直播问答系统(解析)》)中,分析过直播问答系统如何通过多通道设计系统架构,降低复杂度。
下面,我们分别分析一下如何基于 IM 系统实现文件传输和语音通话。
一、