Jack Jiang

我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
posts - 123, comments - 13, trackbacks - 0, articles - 0

2019年4月1日

     摘要: 1、引言相信看到这个标题,很多人的第一反应就是:对数据库进行分库分表啊!但是实际上,数据库层面的分库分表到底是用来干什么的,其不同的作用如何应对不同的场景,我觉得很多同学可能都没搞清楚。本篇文章我们一起来学习一下,对于一个支撑日活百万用户的高并发系统,数据库架构应该如何设计呢?本文的讨论和分享,将用一个创业公司的发展作为背景引入,方便大家理解。(本文同步发布于:http://www.52im.ne...  阅读全文

posted @ 2019-05-15 14:39 Jack Jiang 阅读(33) | 评论 (0)编辑 收藏

     摘要: 【来源申明】本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:《中国通信的百年沉浮》,本文引用时已征得原作者同意。为了更好的内容呈现,即时通讯网在收录时内容有稍许调整,转载时请注明原文来源信息,请尊重原作者的劳动。1、系列文章引言1.1 适合谁来阅读?本系列文章尽量使用最浅显易懂的文字、图片来组织内容,力求通信技术零基础的人群也能看懂。但个人建...  阅读全文

posted @ 2019-05-05 15:40 Jack Jiang 阅读(15) | 评论 (0)编辑 收藏

     摘要: 1、引言关于“负载均衡”的解释,百度词条里:负载均衡,英文叫Load Balance,意思就是将请求或者数据分摊到多个操作单元上进行执行,共同完成工作任务。负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡有两方面的含义:1)首先,大量的并...  阅读全文

posted @ 2019-04-29 14:39 Jack Jiang 阅读(23) | 评论 (0)编辑 收藏

     摘要: 一、引言WebSocket是一种比较新的协议,它是伴随着html5规范而生的,虽然还比较年轻,但大多主流浏览器都已经支持。它使用方面、应用广泛,已经渗透到前后端开发的各种场景中。对http一问一答中二式流程(就是从所周之的“长轮询”技要啦)的不满,催生了支持双向通信的WebSocket诞生。WebSocket是个不太干净协议。本文将从8个常见的疑问入手,为还不了解WebSo...  阅读全文

posted @ 2019-04-25 14:27 Jack Jiang 阅读(27) | 评论 (0)编辑 收藏

     摘要: 本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为《百度App网络深度优化系列《二》连接优化》,感谢原作者的无私分享。一、前言在《百度APP移动端网络深度优化实践分享(一):DNS优化篇》里大家了解到网络优化一般会首选优化DNS,而接下来的HTTP协议成为优化的重点,一般优化者会选择协议切换,合并请求,精简数据包大小等手段来对HTT...  阅读全文

posted @ 2019-04-24 16:25 Jack Jiang 阅读(22) | 评论 (0)编辑 收藏

     摘要: 本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为《百度App网络深度优化系列《一》DNS优化》,感谢原作者的无私分享。一、前言网络优化是客户端几大技术方向中公认的一个深度领域,所以百度App给大家带来网络深度优化系列文章。本系列文章目录如下:《百度APP移动端网络深度优化实践分享(一):DNS优化篇》(* 本文)《百度APP移动端...  阅读全文

posted @ 2019-04-22 13:51 Jack Jiang 阅读(23) | 评论 (0)编辑 收藏

     摘要: 1、引言我,Scott,一家创业公司的 CTO。从业6年却很少写文章,近一年来接触了几十个刚毕业的前端新人,也面试了100多个前端工程师和Nodejs工程师,对于前端发展的这个职业算是有些感触吧,打算陆续写一些从业经验也好,技术分享也好,对自己前6年的经历做一些文字上的沉淀。此篇文章谨献给工作0 ~ 3年的前端工程师,内容都是我的亲身经历,不精彩但接地气。(本文同步发布于:http://www.5...  阅读全文

posted @ 2019-04-15 11:45 Jack Jiang 阅读(38) | 评论 (0)编辑 收藏

     摘要: 1、引言在文章《理论联系实际:Wireshark抓包分析TCP 3次握手、4次挥手过程》中,我们学会了用wireshark来分析TCP的“三次握手,四次挥手”,非常好用。这就是传说中的锤子,拿着 锤子,看什么都像 钉子!在这本文中,我对将准 HTTP这颗钉子,狠狠地砸下去。。。为了对网络数据包的“流转”有更加深刻的理解,我在docker(远程)上部署...  阅读全文

posted @ 2019-04-13 11:27 Jack Jiang 阅读(26) | 评论 (0)编辑 收藏

     摘要: 1、引言HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。本文,就来深入介绍下其原理。补充:限于篇幅,本文对于https的相关技术要点的介绍尽量简明扼要,如想要详细了解HTTPS的方方面面,请阅读《即时通讯安全篇(七):如果这样来理解HTTPS,一篇就够了》。(本文同步发布于:ht...  阅读全文

posted @ 2019-04-08 11:48 Jack Jiang 阅读(21) | 评论 (0)编辑 收藏

     摘要: 1、系列文章引言1.1 适合谁来阅读?本系列文章尽量使用最浅显易懂的文字、图片来组织内容,力求通信技术零基础的人群也能看懂。但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获。如果您大学学习过《计算机网络》这门课,那么一定不要错过本系列文章。特别推荐即时通讯开发者来阅读,因为针对移动弱网的问题,确实可以找到很多有价值的答案。友情提示:本系列文章可能涉及以下通信技术范畴,如您有兴趣,也可...  阅读全文

posted @ 2019-04-02 13:06 Jack Jiang 阅读(20) | 评论 (0)编辑 收藏

1、引言

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

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

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

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

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

学习交流:

- 即时通讯/推送技术开发交流4群:101279154[推荐]

- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM

(本文同步发布于:http://www.52im.net/thread-2433-1-1.html

2、关于作者

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

3、阅读对象

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

技术往事:微信估值已超5千亿,雷军曾有机会收编张小龙及其Foxmail

QQ和微信凶猛成长的背后:腾讯网络基础架构的这些年

闲话即时通讯:腾讯的成长史本质就是一部QQ成长史

腾讯开发微信花了多少钱?技术难度真这么大?难在哪?

技术往事:史上最全QQ图标变迁过程,追寻IM巨人的演进历史

开发往事:深度讲述2010到2015,微信一路风雨的背后

开发往事:记录微信3.0版背后的故事(距微信1.0发布9个月时)

微信七年回顾:历经多少质疑和差评,才配拥有今天的强大

前创始团队成员分享:盘点微信的前世今生——微信成功的必然和偶然

QQ的成功,远没有你想象的那么顺利和轻松

[技术脑洞] 如果把14亿中国人拉到一个微信群里技术上能实现吗?

QQ和微信止步不前,意味着即时通讯社交应用创业的第2春已来?

那些年微信开发过的鸡肋功能,及其带给我们的思考

为什么说即时通讯社交APP创业就是一个坑?

即时通讯创业必读:解密微信的产品定位、创新思维、设计法则等

老罗最新发布了“子弹短信”这款IM,主打熟人社交能否对标微信?

盘点和反思在微信的阴影下艰难求生的移动端IM应用

QQ现状深度剖析:你还认为QQ已经被微信打败了吗?

那些年微信开发过的鸡肋功能,及其带给我们的思考

渐行渐远的人人网:十年亲历者的互联网社交产品复盘和反思

中国互联网社交二十年:全民见证的互联网创业演义

IM热门功能讨论:为什么微信里没有消息“已读”功能?

读懂微信:从1.0到7.0版本,一个主流IM社交工具的进化史

王欣回应微信封禁,解释为何取名“马桶MT”

同为IM社交产品中的王者,QQ与微信到底有什么区别

还原真实的腾讯:从最不被看好,到即时通讯巨头的草根创业史

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

从客户端的角度来谈谈移动端IM的消息可靠性和送达机制

移动端IM中大规模群消息的推送如何保证效率、实时性?

IM消息送达保证机制实现(一):保证在线实时消息的可靠投递

IM消息送达保证机制实现(二):保证离线消息的可靠投递

如何保证IM实时消息的“时序性”与“一致性”?

IM单聊和群聊中的在线状态同步应该用“推”还是“拉”?

IM群聊消息如此复杂,如何保证不丢不重?

完全自已开发的IM该如何设计“失败重试”机制?

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

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

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

整个过程如下图所示:

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

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

1)李雷手机上的IM客户端(微信);

2)IM服务端;

3)韩梅梅手机上的IM客户端(微信)。

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

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

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

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

1)消息编辑:

李雷操作键盘输入要发送的文字,点击“发送”按钮。这一切都发生在IM客户端的界面模块中。类似用笔在信纸上写信,键盘就是笔,聊天框就是信纸;

2)消息入库:

IM客户端中的数据模块会先将聊天内容“Hello!”加上谁发给谁等信息,按标准格式打包为一条IM消息,并存入本地数据库。这类似信纸装入信封,填写地址,投入邮箱的过程。一条IM消息就是一封信,本地数据库就是李雷家的邮箱;

3)消息发送:

IM客户端中的网络模块通过长连接将IM消息发给IM服务端。这类似邮递员将信件汇总发往邮政局。网络模块就是邮递员,IM服务端就是邮政局。(长连接是IM客户端跟IM服务端一直保持的网络链路)。

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

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

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

1)消息接收:

长连接服务从和李雷的长连接接收到“Hello!”的IM消息。IM服务端跟所有登录的IM客户端保持长连接(一条一直活跃的网络链路,每个客户端一条),长连接上定时会有心跳消息来监测客户端的在线离线状态,心跳消息就像邮递员每天都会在邮政局和邮箱之间巡回一样;

2)消息验证:

用户服务查询IM消息的目标人韩梅梅,以及发送人李雷和目标人韩梅梅是否好友关系,确保韩梅梅是真实存在而非虚构的,并且韩梅梅愿意接收李雷的消息,否则会给李雷退信。(一般IM服务端会将IM消息的副本存入数据库中备份);

3)消息转发:

在长连接服务中找到跟韩梅梅手机上IM客户端保持的长连接,并将消息发送给韩梅梅。

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

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

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

1)消息接收:

网络模块通过跟IM服务端保持的长连接接收IM消息;

2)消息入库:

网络模块会将IM消息存入本地数据库,即信件投入了韩梅梅家的邮箱。网络模块就是邮递员,本地数据库就是韩梅梅家的邮箱;

3)消息展示:

界面模块获取发送人头像,和消息内容一起显示在聊天界面上。

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

(本文同步发布于:http://www.52im.net/thread-2433-1-1.html

posted @ 2019-04-01 18:22 Jack Jiang 阅读(16) | 评论 (0)编辑 收藏

Jack Jiang的 Mail: jb2011@163.com, 联系QQ: 413980957, 微信: hellojackjiang