默认
打赏 发表评论 5
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
知识科普:IM聊天应用是如何将消息发送给对方的?(非技术篇)
微信扫一扫关注!

本文由作者“巩鹏军“原创发布于微信公众号“巩鹏军”,原题《IM即时通讯 - 消息是怎么送达的?》,即时通讯收录时有修订和改动,感谢作者的分享。
即时通讯网收录和修订,已征得原作者同意。如需转载,请注明详细出处,请尊重原作者的劳动。


1、引言


沟通是人类的最基本需求,复杂多变的沟通内容、沟通方式,正是人类文明之所以如此璀璨的关键所在。

timg-(1).jpg

在自然界中,要完成一件事情的沟通,我们可以直接通过声音传递给对方,这是再平常不过的事了(靠“吼”就能解决)。

随着计算机的普及,互联网改变了我们的生活,甚至改变了我们的沟通方式。现在,“有什么事微信或QQ上找我”已经是很多的人口头禅了。

timg (2).jpeg

那么,作为不懂技术的普通人,有没有想过,你每次使用QQ或微这种IM聊天应用时,你所发送的消息,是如何被计算机送达给对方的?(这显然不可能靠“吼”解决 ^_^

本文将从非技术人员的视角,为你讲解一下IM聊天应用中的聊天消息是怎么发送的。

2、关于作者


a.jpg
巩鹏军:专注移动开发十多年,热爱即时通讯技术。个人微信公众号:“巩鹏军”。

作者在即时通讯网分享的另一篇《IM开发干货分享:IM客户端不同版本兼容运行的技术思路和实践总结》,感兴趣的读者可以一读。

3、阅读对象


本文适合非技术背景的读者阅读,如您喜欢本文,则下列文章您也可能喜欢:


如果您是专业技术人员,则跟本文相关的专业技术知识等,可以以下文章中找到:


好了,费话不多说,我们开始正文部分。。。

4、在微信里,我们发送一条聊天消息是如此简单


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

整个过程如下图所示:
1.jpg
▲ 一条聊天消息发送的全过程

从上面的图示可以看到,整个过程涉及三大部分:

  • 1)李雷手机上的IM客户端(微信);
  • 2)IM服务端;
  • 3)韩梅梅手机上的IM客户端(微信)。

下面,我们逐一介绍每个部分的具体工作原理。

5、消息发送者:发送端是怎么工作的?


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

2.jpg

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

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

6、消息“中转站”:IM服务端是怎么工作的?


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

3.jpg

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

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

7、消息接收者:接收端又是怎么工作的呢?


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

4.jpg

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

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

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

(原文链接:点击进入

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

上一篇:IM开发者的零基础通信技术入门(十五):理解定位技术,一篇就够下一篇:一篇读懂HTTPS:加密原理、安全逻辑、数字证书等

本帖已收录至以下技术专辑

推荐方案
评论 5
学习了
签名: 哈哈哈
我觉得给非技术人员 讲解im 就是个伪命题  因为。。。。他们不会听的。
签名: 哈哈哈
引用:后来_lG8o1 发表于 2019-06-06 16:56
我觉得给非技术人员 讲解im 就是个伪命题  因为。。。。他们不会听的。

学习了
学习了,简明意赅
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部