知識(shí)科普:IM聊天應(yīng)用是如何將消息發(fā)送給對(duì)方的?(非技術(shù)篇)
Posted on 2019-04-01 18:22 Jack Jiang 閱讀(138) 評(píng)論(0) 編輯 收藏1、引言
溝通是人類的最基本需求,復(fù)雜多變的溝通內(nèi)容、溝通方式,正是人類文明之所以如此璀璨的關(guān)鍵所在。
在自然界中,要完成一件事情的溝通,我們可以直接通過聲音傳遞給對(duì)方,這是再平常不過的事了(靠“吼”就能解決)。
隨著計(jì)算機(jī)的普及,互聯(lián)網(wǎng)改變了我們的生活,甚至改變了我們的溝通方式。現(xiàn)在,“有什么事微信或QQ上找我”已經(jīng)是很多的人口頭禪了。
那么,作為不懂技術(shù)的普通人,有沒有想過,你每次使用QQ或微這種IM聊天應(yīng)用時(shí),你所發(fā)送的消息,是如何被計(jì)算機(jī)送達(dá)給對(duì)方的?(這顯然不可能靠“吼”解決 ^_^)
本文將從非技術(shù)人員的視角,為你講解一下IM聊天應(yīng)用中的聊天消息是怎么發(fā)送的。
學(xué)習(xí)交流:
- 即時(shí)通訊/推送技術(shù)開發(fā)交流4群:101279154[推薦]
- 移動(dòng)端IM開發(fā)入門文章:《新手入門一篇就夠:從零開發(fā)移動(dòng)端IM》
(本文同步發(fā)布于:http://www.52im.net/thread-2433-1-1.html)
2、關(guān)于作者
鞏鵬軍:專注移動(dòng)開發(fā)十多年,熱愛即時(shí)通訊技術(shù)。個(gè)人微信公眾號(hào):“鞏鵬軍”。
3、閱讀對(duì)象
本文適合非技術(shù)背景的讀者閱讀,如您喜歡本文,則下列文章您也可能喜歡:
《技術(shù)往事:微信估值已超5千億,雷軍曾有機(jī)會(huì)收編張小龍及其Foxmail》
《QQ和微信兇猛成長的背后:騰訊網(wǎng)絡(luò)基礎(chǔ)架構(gòu)的這些年》
《閑話即時(shí)通訊:騰訊的成長史本質(zhì)就是一部QQ成長史》
《騰訊開發(fā)微信花了多少錢?技術(shù)難度真這么大?難在哪?》
《技術(shù)往事:史上最全QQ圖標(biāo)變遷過程,追尋IM巨人的演進(jìn)歷史》
《開發(fā)往事:深度講述2010到2015,微信一路風(fēng)雨的背后》
《開發(fā)往事:記錄微信3.0版背后的故事(距微信1.0發(fā)布9個(gè)月時(shí))》
《微信七年回顧:歷經(jīng)多少質(zhì)疑和差評(píng),才配擁有今天的強(qiáng)大》
《前創(chuàng)始團(tuán)隊(duì)成員分享:盤點(diǎn)微信的前世今生——微信成功的必然和偶然》
《[技術(shù)腦洞] 如果把14億中國人拉到一個(gè)微信群里技術(shù)上能實(shí)現(xiàn)嗎?》
《QQ和微信止步不前,意味著即時(shí)通訊社交應(yīng)用創(chuàng)業(yè)的第2春已來?》
《為什么說即時(shí)通訊社交APP創(chuàng)業(yè)就是一個(gè)坑?》
《即時(shí)通訊創(chuàng)業(yè)必讀:解密微信的產(chǎn)品定位、創(chuàng)新思維、設(shè)計(jì)法則等》
《老羅最新發(fā)布了“子彈短信”這款I(lǐng)M,主打熟人社交能否對(duì)標(biāo)微信?》
《盤點(diǎn)和反思在微信的陰影下艱難求生的移動(dòng)端IM應(yīng)用》
《QQ現(xiàn)狀深度剖析:你還認(rèn)為QQ已經(jīng)被微信打敗了嗎?
《漸行漸遠(yuǎn)的人人網(wǎng):十年親歷者的互聯(lián)網(wǎng)社交產(chǎn)品復(fù)盤和反思》
《中國互聯(lián)網(wǎng)社交二十年:全民見證的互聯(lián)網(wǎng)創(chuàng)業(yè)演義》
《讀懂微信:從1.0到7.0版本,一個(gè)主流IM社交工具的進(jìn)化史》
如果您是專業(yè)技術(shù)人員,則跟本文相關(guān)的專業(yè)技術(shù)知識(shí)等,可以以下文章中找到:
《從客戶端的角度來談?wù)勔苿?dòng)端IM的消息可靠性和送達(dá)機(jī)制》
《移動(dòng)端IM中大規(guī)模群消息的推送如何保證效率、實(shí)時(shí)性?》
《IM消息送達(dá)保證機(jī)制實(shí)現(xiàn)(一):保證在線實(shí)時(shí)消息的可靠投遞》
《IM消息送達(dá)保證機(jī)制實(shí)現(xiàn)(二):保證離線消息的可靠投遞》
《如何保證IM實(shí)時(shí)消息的“時(shí)序性”與“一致性”?》
好了,費(fèi)話不多說,我們開始正文部分。。。
4、在微信里,我們發(fā)送一條聊天消息是如此簡單
李雷在手機(jī)上打開微信(IM客戶端),在聊天輸框中輸入“Hello!”,點(diǎn)擊發(fā)送。幾乎是瞬間,韓梅梅手機(jī)上的微信(IM客戶端)就會(huì)顯示李雷的頭像后面跟著“Hello!”。
整個(gè)過程如下圖所示:
從上面的圖示可以看到,整個(gè)過程涉及三大部分:
1)李雷手機(jī)上的IM客戶端(微信);
2)IM服務(wù)端;
3)韓梅梅手機(jī)上的IM客戶端(微信)。
下面,我們逐一介紹每個(gè)部分的具體工作原理。
5、消息發(fā)送者:發(fā)送端是怎么工作的?
先看看發(fā)送端,李雷手機(jī)上的IM客戶端中發(fā)生了什么?
從上圖可以看出,發(fā)送一條信息經(jīng)過三個(gè)步驟:
1)消息編輯:
李雷操作鍵盤輸入要發(fā)送的文字,點(diǎn)擊“發(fā)送”按鈕。這一切都發(fā)生在IM客戶端的界面模塊中。類似用筆在信紙上寫信,鍵盤就是筆,聊天框就是信紙;
2)消息入庫:
IM客戶端中的數(shù)據(jù)模塊會(huì)先將聊天內(nèi)容“Hello!”加上誰發(fā)給誰等信息,按標(biāo)準(zhǔn)格式打包為一條IM消息,并存入本地?cái)?shù)據(jù)庫。這類似信紙裝入信封,填寫地址,投入郵箱的過程。一條IM消息就是一封信,本地?cái)?shù)據(jù)庫就是李雷家的郵箱;
3)消息發(fā)送:
IM客戶端中的網(wǎng)絡(luò)模塊通過長連接將IM消息發(fā)給IM服務(wù)端。這類似郵遞員將信件匯總發(fā)往郵政局。網(wǎng)絡(luò)模塊就是郵遞員,IM服務(wù)端就是郵政局。(長連接是IM客戶端跟IM服務(wù)端一直保持的網(wǎng)絡(luò)鏈路)。
6、消息“中轉(zhuǎn)站”:IM服務(wù)端是怎么工作的?
擔(dān)負(fù)“郵政局”職責(zé)的IM服務(wù)端是IM世界中全知全能的神,它認(rèn)識(shí)所有人,經(jīng)手所有消息,跟每個(gè)人都一直保持聯(lián)系(長連接)。
每條消息在IM服務(wù)端中都要至少經(jīng)過以下處理:
1)消息接收:
長連接服務(wù)從和李雷的長連接接收到“Hello!”的IM消息。IM服務(wù)端跟所有登錄的IM客戶端保持長連接(一條一直活躍的網(wǎng)絡(luò)鏈路,每個(gè)客戶端一條),長連接上定時(shí)會(huì)有心跳消息來監(jiān)測(cè)客戶端的在線離線狀態(tài),心跳消息就像郵遞員每天都會(huì)在郵政局和郵箱之間巡回一樣;
2)消息驗(yàn)證:
用戶服務(wù)查詢IM消息的目標(biāo)人韓梅梅,以及發(fā)送人李雷和目標(biāo)人韓梅梅是否好友關(guān)系,確保韓梅梅是真實(shí)存在而非虛構(gòu)的,并且韓梅梅愿意接收李雷的消息,否則會(huì)給李雷退信。(一般IM服務(wù)端會(huì)將IM消息的副本存入數(shù)據(jù)庫中備份);
3)消息轉(zhuǎn)發(fā):
在長連接服務(wù)中找到跟韓梅梅手機(jī)上IM客戶端保持的長連接,并將消息發(fā)送給韓梅梅。
7、消息接收者:接收端又是怎么工作的呢?
下面看看韓梅梅手機(jī)上發(fā)生了什么?
韓梅梅手機(jī)上的IM客戶端和李雷(發(fā)送者)的是一樣的,但處理步驟是不同的:
1)消息接收:
網(wǎng)絡(luò)模塊通過跟IM服務(wù)端保持的長連接接收IM消息;
2)消息入庫:
網(wǎng)絡(luò)模塊會(huì)將IM消息存入本地?cái)?shù)據(jù)庫,即信件投入了韓梅梅家的郵箱。網(wǎng)絡(luò)模塊就是郵遞員,本地?cái)?shù)據(jù)庫就是韓梅梅家的郵箱;
3)消息展示:
界面模塊獲取發(fā)送人頭像,和消息內(nèi)容一起顯示在聊天界面上。
經(jīng)過上述過程,韓梅梅在自己手機(jī)上就看到了李雷發(fā)過來的“Hello!”,因?yàn)槔罾缀晚n梅梅都是一直和服務(wù)器保持長連接,所以上述過程是瞬間完成的,李雷和韓梅梅感覺就像面對(duì)面聊天一樣方便。這也是Instant Messaging名字的來歷。
(本文同步發(fā)布于:http://www.52im.net/thread-2433-1-1.html)
作者:Jack Jiang (點(diǎn)擊作者姓名進(jìn)入Github)
出處:http://www.52im.net/space-uid-1.html
交流:歡迎加入即時(shí)通訊開發(fā)交流群 215891622
討論:http://www.52im.net/
Jack Jiang同時(shí)是【原創(chuàng)Java
Swing外觀工程BeautyEye】和【輕量級(jí)移動(dòng)端即時(shí)通訊框架MobileIMSDK】的作者,可前往下載交流。
本博文
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處(也可前往 我的52im.net 找到我)。