专业IM即时通讯软件开发,值得信赖!

IM即时通讯 – 消息是怎么送达的?

未分类 云聊IM 65℃

沟通是人类的基本需求,为此我们学习语言,除了母语、还学外语。

在电脑可以上网的时候,人们想跟网上的人交流,1996年,三个以色列青年开发了ICQ。ICQ是第一个广泛使用的IM应用(Instant Messaging 即时通讯),其特点是1对1实时聊天。 


ICQ 英文 “I SEEK YOU” 中文「我找你」

到了移动互联网时代,因为智能手机都是随身携带的,人们随时随地都可以聊天。人们手机上用得最多的IM是微信和QQ。

本文从非技术人员的视角看一下聊天消息是怎么发送的。

李雷在手机上打开微信(IM客户端),在聊天输框中输入“Hello!”,点击发送,几乎是瞬间,韩梅梅手机上的微信(IM客户端)就会显示李雷的头像后面跟着“Hello!”。整个过程如下图所示:

一条聊天消息发送的全过程

从上面的图示可以看到,整个过程涉及三大部分,李雷手机上的IM客户端(微信),IM服务端 和 韩梅梅手机上的IM客户端(微信)。

先看看发送端,李雷手机上的IM客户端中发生了什么?

从上图可以看出,发送一条信息经过三个步骤:

  1. 消息编辑:李雷操作键盘输入要发送的文字,点击“发送”按钮。这一切都发生在IM客户端的界面模块中。类似用笔在信纸上写信,键盘就是笔,聊天框就是信纸。
  2. 消息入库:IM客户端中的数据模块会先将聊天内容“Hello!”加上谁发给谁等信息,按标准格式打包为一条IM消息,并存入本地数据库。这类似信纸装入信封,填写地址,投入邮箱的过程。一条IM消息就是一封信,本地数据库就是李雷家的邮箱。
  3. 消息发送:IM客户端中的网络模块通过长连接将IM消息发给IM服务端。这类似邮递员将信件汇总发往邮政局。网络模块就是邮递员,IM服务端就是邮政局。(长连接是IM客户端跟IM服务端一直保持的网络链路)

担负“邮政局”职责的IM服务端是IM世界中全知全能的神,它认识所有人,经手所有消息,跟每个人都一直保持联系(长连接)。

每条消息在IM服务端中都要至少经过以下处理:

  1. 消息接收:长连接服务从和李雷的长连接接收到“Hello!”的IM消息。IM服务端跟所有登录的IM客户端保持长连接(一条一直活跃的网络链路,每个客户端一条),长连接上定时会有心跳消息来监测客户端的在线离线状态,心跳消息就像邮递员每天都会在邮政局和邮箱之间巡回一样。
  2. 消息验证:用户服务查询IM消息的目标人韩梅梅,以及发送人李雷和目标人韩梅梅是否好友关系,确保韩梅梅是真实存在而非虚构的,并且韩梅梅愿意接收李雷的消息,否则会给李雷退信。(一般IM服务端会将IM消息的副本存入数据库中备份)
  3. 消息转发:在长连接服务中找到跟韩梅梅手机上IM客户端保持的长连接,并将消息发送给韩梅梅。

下面看看韩梅梅手机上发生了什么?

韩梅梅手机上的IM客户端和李雷的是一样的,但处理步骤是不同的:

  1. 消息接收:网络模块通过跟IM服务端保持的长连接接收IM消息
  2. 消息入库:网络模块会将IM消息存入本地数据库,即信件投入了韩梅梅家的邮箱。网络模块就是邮递员,本地数据库就是韩梅梅家的邮箱。
  3. 消息展示:界面模块获取发送人头像,和消息内容一起显示在聊天界面上。

经过上述过程,韩梅梅在自己手机上就看到了李雷发过来的“Hello!”,因为李雷和韩梅梅都是一直和服务器保持长连接,所以上述过程是瞬间完成的,李雷和韩梅梅感觉就像面对面聊天一样方便。这也是Instant Messaging名字的来历。

喜欢 (0)
仿微信聊天软件开发