二維碼
        企資網(wǎng)

        掃一掃關(guān)注

        當(dāng)前位置: 首頁(yè) » 企資快訊 » 匯總 » 正文

        通俗易懂_即時(shí)通訊初學(xué)者入門(mén)_WhatsApp

        放大字體  縮小字體 發(fā)布日期:2021-09-23 11:41:50    作者:沙海萍    瀏覽次數(shù):5
        導(dǎo)讀

        譯自Codin Gurukul經(jīng)OpenIM技術(shù)人員整理修訂后發(fā)布。寫(xiě)在前面Open-IM是由前微信技術(shù)可能打造的開(kāi)源的即時(shí)通訊組件。Open-IM包括IM服務(wù)端和客戶(hù)端SDK,實(shí)現(xiàn)了高性能、輕量級(jí)、易擴(kuò)展等重要特性。開(kāi)發(fā)者通過(guò)集成Open-I

        譯自Codin Gurukul經(jīng)OpenIM技術(shù)人員整理修訂后發(fā)布。

        寫(xiě)在前面

        Open-IM是由前微信技術(shù)可能打造的開(kāi)源的即時(shí)通訊組件。Open-IM包括IM服務(wù)端和客戶(hù)端SDK,實(shí)現(xiàn)了高性能、輕量級(jí)、易擴(kuò)展等重要特性。開(kāi)發(fā)者通過(guò)集成Open-IM組件,并私有化部署服務(wù)端,可以將即時(shí)通訊、實(shí)時(shí)網(wǎng)絡(luò)能力快速集成到自身應(yīng)用中,并確保業(yè)務(wù)數(shù)據(jù)的安全性和私密性。

        了解更多來(lái)自互聯(lián)網(wǎng)文章:

        【OpenIM來(lái)自互聯(lián)網(wǎng)】開(kāi)源OpenIM:輕量、高效、實(shí)時(shí)、可靠、低成本的消息模型

        【OpenIM來(lái)自互聯(lián)網(wǎng)】C/C++調(diào)用golang函數(shù),golang回調(diào)C/C++函數(shù)

        【OpenIM來(lái)自互聯(lián)網(wǎng)】簡(jiǎn)單輕松入門(mén) 一文講解WebRTC實(shí)現(xiàn)1對(duì)1音視頻通信原理

        【OpenIM擴(kuò)展】OpenIM服務(wù)發(fā)現(xiàn)和負(fù)載均衡golang插件:gRPC接入etcdv3

        【開(kāi)源OpenIM】高性能、可伸縮、易擴(kuò)展的即時(shí)通訊架構(gòu)

        實(shí)時(shí)消息現(xiàn)在是我們?nèi)粘I钪斜夭豢缮俚囊徊糠帧5牵阌袥](méi)有想過(guò)“WhatsApp”或其他實(shí)時(shí)消息應(yīng)用程序是如何工作的?

        在本文中,我們將探討whatsapp或任何通用實(shí)時(shí)消息應(yīng)用程序背后的高級(jí)工程和系統(tǒng)架構(gòu)。

        在深入研究之前,讓我們先了解“通訊是如何工作的?

        當(dāng)兩個(gè)客戶(hù)機(jī)(A和B)想要相互通信或發(fā)送消息時(shí),他們首先知道對(duì)方的地址(可能是IP、MAC或任何自定義的唯一標(biāo)識(shí)),然后通過(guò)網(wǎng)絡(luò)彼此交換消息,在這種情況下是INTERNET。這個(gè)就是所謂的p2p通信了。

        但是,如果網(wǎng)絡(luò)非常龐大,客戶(hù)數(shù)量達(dá)到數(shù)百萬(wàn)或數(shù)十億,該怎么辦?

        在一個(gè)非常大的網(wǎng)絡(luò)中,很難知道每個(gè)客戶(hù)機(jī)的地址,在這種情況下,為了使這個(gè)系統(tǒng)更加健壯和高可用性,我們需要在客戶(hù)機(jī)之間安裝一個(gè)名為“服務(wù)器”的組件。此服務(wù)器的任務(wù)是協(xié)調(diào)連接到它的所有客戶(hù)端,中轉(zhuǎn)雙方之間的消息。

        服務(wù)器引入后。所有客戶(hù)端都與服務(wù)器連接,而不是彼此連接,這樣成了中心化的通訊架構(gòu)

        在這種情況下,當(dāng)一個(gè)客戶(hù)機(jī)(a)想要向其他客戶(hù)機(jī)(D)發(fā)送消息時(shí),它首先將消息發(fā)送到服務(wù)器,服務(wù)器知道其他客戶(hù)機(jī)(D)的地址,然后將消息轉(zhuǎn)發(fā)給其他客戶(hù)機(jī)(D),反之亦然。

        這是通信體系結(jié)構(gòu)的概述。讓我們?cè)O(shè)計(jì)一個(gè)實(shí)時(shí)消息傳遞系統(tǒng)的實(shí)際系統(tǒng)設(shè)計(jì)。

        但在設(shè)計(jì)任何產(chǎn)品之前,了解以下要求非常重要:

        1. 用戶(hù)群:了解應(yīng)用程序的使用規(guī)模非常重要。
        2. 所需功能

        那么,讓我們列出whatsapp中需要包含的一些功能:

        1). 發(fā)消息

        2). 多媒體支持

        3). Last Seen

        4). 消息加密

        5). 音頻/視頻通話(huà)

        根據(jù)應(yīng)用程序需求設(shè)計(jì)系統(tǒng)

        根據(jù)應(yīng)用程序需求設(shè)計(jì)系統(tǒng)

        根據(jù)用戶(hù)群,我們需要多臺(tái)服務(wù)器來(lái)處理如此多的流量,因此我們放置了多臺(tái)服務(wù)器,而不是一臺(tái)服務(wù)器,這就是集群的概念

        但問(wèn)題是,客戶(hù)端將連接到哪個(gè)服務(wù)器,因?yàn)橛卸鄠€(gè)服務(wù)器,并且客戶(hù)端不能隨機(jī)連接到任何服務(wù)器。為了克服這個(gè)問(wèn)題,我們?cè)诳蛻?hù)端和服務(wù)器之間引入了負(fù)載均衡。

        在實(shí)現(xiàn)了多個(gè)服務(wù)器和負(fù)載平衡器之后,我們的系統(tǒng)架構(gòu)能夠處理大量用戶(hù)。現(xiàn)在,當(dāng)客戶(hù)機(jī)想要連接到服務(wù)器時(shí),連接請(qǐng)求首先命中負(fù)載平衡器,然后負(fù)載平衡器根據(jù)各個(gè)服務(wù)器上的負(fù)載等各種參數(shù)將連接重定向到服務(wù)器。

        但我們的應(yīng)用程序也需要一些存儲(chǔ)機(jī)制來(lái)保存一些任意狀態(tài)或數(shù)據(jù),為了滿(mǎn)足這一要求,我們還添加了可供所有服務(wù)器訪(fǎng)問(wèn)的數(shù)據(jù)庫(kù)。

        但是,使用什么樣的連接呢?

        通常,這種系統(tǒng)使用雙工連接或雙向連接。由于消息也可以從服務(wù)器生成,因此需要雙向通信

        在繼續(xù)之前,讓我們先了解不同的連接場(chǎng)景以及應(yīng)用程序的工作方式。

        1. 當(dāng)發(fā)送方連接到服務(wù)器而不是接收方時(shí)。

        在這種情況下,當(dāng)接收方未連接到服務(wù)器時(shí),消息存儲(chǔ)在數(shù)據(jù)庫(kù)中,當(dāng)接收方連接到服務(wù)器時(shí),消息從數(shù)據(jù)庫(kù)中提取并轉(zhuǎn)發(fā)給接收方,這個(gè)就是離線(xiàn)消息的作用。

        2.當(dāng)發(fā)送方未連接到服務(wù)器時(shí)。

        在這種情況下,當(dāng)發(fā)送方未連接到服務(wù)器時(shí),發(fā)送方發(fā)送的消息將保存在設(shè)備本地存儲(chǔ)中(可能是SQLite或基于平臺(tái)的任何其他內(nèi)容)。當(dāng)發(fā)送者聯(lián)機(jī)或連接到服務(wù)時(shí),消息將從本地存儲(chǔ)中提取并發(fā)送到服務(wù)器。這個(gè)就是本地存儲(chǔ)的作用。

        3.當(dāng)兩個(gè)客戶(hù)端都連接到服務(wù)器時(shí):

        在這種情況下,當(dāng)兩個(gè)客戶(hù)端都連接到服務(wù)器時(shí),發(fā)送方發(fā)送消息,服務(wù)器將該消息轉(zhuǎn)發(fā)給接收方,而不將消息存儲(chǔ)到數(shù)據(jù)庫(kù)或設(shè)備本地存儲(chǔ)器。

        需要知道的一件事是,連接總是由客戶(hù)機(jī)啟動(dòng)的,因?yàn)榉?wù)器不知道客戶(hù)機(jī)的地址,但客戶(hù)機(jī)知道服務(wù)器的地址。

        發(fā)送、交付和查看三個(gè)狀態(tài)

        發(fā)送:當(dāng)我們發(fā)送一條消息,而該消息被Whatsapp服務(wù)器接收時(shí)。

        已傳遞:當(dāng)消息從Whatsapp服務(wù)器傳遞到接收方時(shí)。

        已查看:當(dāng)信息被接收者看到/打開(kāi)時(shí)。

        為了合并所有這些狀態(tài)更改,每條消息都有一個(gè)唯一的,用于標(biāo)識(shí)每條消息以及來(lái)自各種事件(已發(fā)送/已交付/已查看)的確認(rèn)。

        當(dāng)客戶(hù)端連接到服務(wù)器時(shí),Whatsapp服務(wù)器內(nèi)部會(huì)發(fā)生什么?

        當(dāng)客戶(hù)端連接到WhatsApp服務(wù)器時(shí),將針對(duì)該客戶(hù)端創(chuàng)建一個(gè)進(jìn)程(或線(xiàn)程)。此流程負(fù)責(zé)處理與該客戶(hù)機(jī)相關(guān)的所有操作。

        每個(gè)進(jìn)程都有一個(gè)隊(duì)列(以淺綠色突出顯示),作為該進(jìn)程的緩沖區(qū)。創(chuàng)建流程后,將在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表,以維護(hù)P(流程)和關(guān)聯(lián)客戶(hù)機(jī)的記錄。

        Last Seen是怎么回事?

        這個(gè)特性的實(shí)現(xiàn)非常簡(jiǎn)單和直接,它只需要維護(hù)一個(gè)帶有客戶(hù)機(jī)和時(shí)間戳的記錄。

        我們?cè)谥悄苁謾C(jī)中打開(kāi)Whatsapp時(shí),我們的應(yīng)用程序每5秒向服務(wù)器發(fā)送一個(gè)脈沖,并且隨著每個(gè)脈沖蕞后一次出現(xiàn),表中的時(shí)間會(huì)更新。當(dāng)客戶(hù)端斷開(kāi)連接時(shí),記錄中存在上次看到的時(shí)間,該時(shí)間由關(guān)閉應(yīng)用程序之前發(fā)送的蕞后一個(gè)脈沖更新。

        媒體共享是如何運(yùn)作的?

        對(duì)于共享,我們不使用用于發(fā)送文本消息的連接,因?yàn)樗且粋€(gè)非常輕量級(jí)的連接,無(wú)法處理這么多負(fù)載。

        相反,WhatsApp使用不同的服務(wù)器(如HTTP)來(lái)共享媒體。

        當(dāng)我們共享一個(gè)媒體時(shí),它會(huì)通過(guò)不同的連接上傳到HTTP服務(wù)器,成功上傳后,HTTP服務(wù)器會(huì)返回一個(gè)與該媒體相關(guān)聯(lián)的哈希值或唯一,該哈希值會(huì)發(fā)送到WhatsApp服務(wù)器。在接收方端,同樣的事情以相反的方式工作,接收方接收哈希值,然后從與該哈希值關(guān)聯(lián)的HTTP服務(wù)器下載媒體。

        電話(huà)服務(wù)也以與媒體服務(wù)相同的方式工作,為此,我們還使用不同的服務(wù)器,并使用不同類(lèi)型的連接(如套接字等)進(jìn)行實(shí)時(shí)通信。

        OpenIM github開(kāi)源地址:

        github/OpenIMSDK/Open-IM-Server

        OpenIM官網(wǎng) :特別rentsoft

        OpenIM官方論壇:forum.rentsoft

        我們致力于通過(guò)開(kāi)源模式,為全球企業(yè)/開(kāi)發(fā)者提供簡(jiǎn)單、易用、高效的IM服務(wù)和實(shí)時(shí)音視頻通訊能力,幫助開(kāi)發(fā)者降低項(xiàng)目的開(kāi)發(fā)成本,并讓開(kāi)發(fā)者掌控業(yè)務(wù)的核心數(shù)據(jù)。

        IM作為核心業(yè)務(wù)數(shù)據(jù),安全的重要性毋庸置疑,OpenIM開(kāi)源以及私有化部署讓企業(yè)能更放心使用。

        如今IM云服務(wù)商收費(fèi)高企,如何讓企業(yè)低成本、安全、可靠接入IM服務(wù),是OpenIM的歷史使命,也是我們前進(jìn)的方向。

        如您有技術(shù)上面的高見(jiàn)請(qǐng)到我們的論壇聯(lián)系溝通,用戶(hù)也可與我們的技術(shù)人員探討使用方面的難題以及見(jiàn)解



         
        (文/沙海萍)
        免責(zé)聲明
        本文僅代表作發(fā)布者:沙海萍個(gè)人觀(guān)點(diǎn),本站未對(duì)其內(nèi)容進(jìn)行核實(shí),請(qǐng)讀者僅做參考,如若文中涉及有違公德、觸犯法律的內(nèi)容,一經(jīng)發(fā)現(xiàn),立即刪除,需自行承擔(dān)相應(yīng)責(zé)任。涉及到版權(quán)或其他問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們刪除處理郵件:weilaitui@qq.com。
         

        Copyright ? 2016 - 2025 - 企資網(wǎng) 48903.COM All Rights Reserved 粵公網(wǎng)安備 44030702000589號(hào)

        粵ICP備16078936號(hào)

        微信

        關(guān)注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯(lián)系
        客服

        聯(lián)系客服:

        在線(xiàn)QQ: 303377504

        客服電話(huà): 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號(hào): weishitui

        客服001 客服002 客服003

        工作時(shí)間:

        周一至周五: 09:00 - 18:00

        主站蜘蛛池模板: 激情内射日本一区二区三区| 日本一区二区在线不卡| 国产福利精品一区二区| 好爽毛片一区二区三区四| 国产精品一区二区久久精品涩爱| 大屁股熟女一区二区三区| 一区二区视频免费观看| 久久蜜桃精品一区二区三区| 一区二区三区观看免费中文视频在线播放| 亚洲AV无码一区二区三区鸳鸯影院 | 久久青草国产精品一区| 国产精品一区在线观看你懂的| 国产天堂在线一区二区三区| 成人在线观看一区| 中文字幕日韩一区二区不卡| 亚洲AV无码一区二区三区网址| 中文字幕精品无码一区二区 | 亚洲A∨无码一区二区三区| 日本在线一区二区| 亚洲国产精品乱码一区二区| 麻豆文化传媒精品一区二区| 中文字幕AV一区二区三区人妻少妇| 国产精品自拍一区| 麻豆亚洲av熟女国产一区二| 亚洲一区二区三区精品视频| 亚洲一区二区无码偷拍| 亚洲日本一区二区三区在线不卡| 人妻无码一区二区视频| 国精品无码一区二区三区左线| 亚洲AV色香蕉一区二区| 亚洲AV日韩综合一区| 一区二区三区午夜| 亚洲一区二区三区无码中文字幕| 精品人伦一区二区三区潘金莲| 色一情一乱一伦一区二区三欧美 | 高清一区二区三区免费视频| 亚洲乱码国产一区三区| 国产精品久久久久久一区二区三区| 国产在线观看91精品一区| 久久精品国产免费一区| 午夜在线视频一区二区三区 |