IM聊天應用是如何將訊息傳送給對方的
溝通是人類的最基本需求,複雜多變的溝通內容、溝通方式,正是人類文明之所以如此璀璨的關鍵所在。
在自然界中,要完成一件事情的溝通,我們可以直接通過聲音傳遞給對方,這是再平常不過的事了(靠“吼”就能解決)。
隨著計算機的普及,網際網路改變了我們的生活,甚至改變了我們的溝通方式。現在,“有什麼事微信或QQ上找我”已經是很多的人口頭禪了。
那麼,作為不懂技術的普通人,有沒有想過,你每次使用QQ或微這種IM聊天應用時,你所傳送的訊息,是如何被計算機送達給對方的?(這顯然不可能靠“吼”解決 ^_^)
在微信裡,我們傳送一條聊天訊息是如此簡單
李雷在手機上開啟微信(IM客戶端),在聊天輸框中輸入“Hello!”,點擊發送。幾乎是瞬間,韓梅梅手機上的微信(IM客戶端)就會顯示李雷的頭像後面跟著“Hello!”。
整個過程涉及三大部分:
1)李雷手機上的IM客戶端(微信);
2)IM服務端;
3)韓梅梅手機上的IM客戶端(微信)。
訊息傳送者:傳送端是怎麼工作的?
先看看傳送端,李雷手機上的IM客戶端中發生了什麼?
傳送一條資訊經過三個步驟:
1)訊息編輯:
李雷操作鍵盤輸入要傳送的文字,點選“傳送”按鈕。這一切都發生在IM客戶端的介面模組中。類似用筆在信紙上寫信,鍵盤就是筆,聊天框就是信紙;
2)訊息入庫:
IM客戶端中的資料模組會先將聊天內容“Hello!”加上誰發給誰等資訊,按標準格式打包為一條IM訊息,並存入本地資料庫。這類似信紙裝入信封,填寫地址,投入郵箱的過程。一條IM訊息就是一封信,本地資料庫就是李雷家的郵箱;
3)訊息傳送:
IM客戶端中的網路模組通過長連線將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名字的來歷。