二維碼
        企資網

        掃一掃關注

        當前位置: 首頁 » 企資快訊 » 匯總 » 正文

        通俗易懂_即時通訊初學者入門_WhatsApp

        放大字體  縮小字體 發布日期:2021-09-23 11:41:50    作者:沙海萍    瀏覽次數:2
        導讀

        譯自Codin Gurukul經OpenIM技術人員整理修訂后發布。寫在前面Open-IM是由前微信技術可能打造的開源的即時通訊組件。Open-IM包括IM服務端和客戶端SDK,實現了高性能、輕量級、易擴展等重要特性。開發者通過集成Open-I

        譯自Codin Gurukul經OpenIM技術人員整理修訂后發布。

        寫在前面

        Open-IM是由前微信技術可能打造的開源的即時通訊組件。Open-IM包括IM服務端和客戶端SDK,實現了高性能、輕量級、易擴展等重要特性。開發者通過集成Open-IM組件,并私有化部署服務端,可以將即時通訊、實時網絡能力快速集成到自身應用中,并確保業務數據的安全性和私密性。

        了解更多來自互聯網文章:

        【OpenIM來自互聯網】開源OpenIM:輕量、高效、實時、可靠、低成本的消息模型

        【OpenIM來自互聯網】C/C++調用golang函數,golang回調C/C++函數

        【OpenIM來自互聯網】簡單輕松入門 一文講解WebRTC實現1對1音視頻通信原理

        【OpenIM擴展】OpenIM服務發現和負載均衡golang插件:gRPC接入etcdv3

        【開源OpenIM】高性能、可伸縮、易擴展的即時通訊架構

        實時消息現在是我們日常生活中必不可少的一部分。但是,你有沒有想過“WhatsApp”或其他實時消息應用程序是如何工作的?

        在本文中,我們將探討whatsapp或任何通用實時消息應用程序背后的高級工程和系統架構。

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

        當兩個客戶機(A和B)想要相互通信或發送消息時,他們首先知道對方的地址(可能是IP、MAC或任何自定義的唯一標識),然后通過網絡彼此交換消息,在這種情況下是INTERNET。這個就是所謂的p2p通信了。

        但是,如果網絡非常龐大,客戶數量達到數百萬或數十億,該怎么辦?

        在一個非常大的網絡中,很難知道每個客戶機的地址,在這種情況下,為了使這個系統更加健壯和高可用性,我們需要在客戶機之間安裝一個名為“服務器”的組件。此服務器的任務是協調連接到它的所有客戶端,中轉雙方之間的消息。

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

        在這種情況下,當一個客戶機(a)想要向其他客戶機(D)發送消息時,它首先將消息發送到服務器,服務器知道其他客戶機(D)的地址,然后將消息轉發給其他客戶機(D),反之亦然。

        這是通信體系結構的概述。讓我們設計一個實時消息傳遞系統的實際系統設計。

        但在設計任何產品之前,了解以下要求非常重要:

        1. 用戶群:了解應用程序的使用規模非常重要。
        2. 所需功能

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

        1). 發消息

        2). 多媒體支持

        3). Last Seen

        4). 消息加密

        5). 音頻/視頻通話

        根據應用程序需求設計系統

        根據應用程序需求設計系統

        根據用戶群,我們需要多臺服務器來處理如此多的流量,因此我們放置了多臺服務器,而不是一臺服務器,這就是集群的概念

        但問題是,客戶端將連接到哪個服務器,因為有多個服務器,并且客戶端不能隨機連接到任何服務器。為了克服這個問題,我們在客戶端和服務器之間引入了負載均衡。

        在實現了多個服務器和負載平衡器之后,我們的系統架構能夠處理大量用戶。現在,當客戶機想要連接到服務器時,連接請求首先命中負載平衡器,然后負載平衡器根據各個服務器上的負載等各種參數將連接重定向到服務器。

        但我們的應用程序也需要一些存儲機制來保存一些任意狀態或數據,為了滿足這一要求,我們還添加了可供所有服務器訪問的數據庫。

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

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

        在繼續之前,讓我們先了解不同的連接場景以及應用程序的工作方式。

        1. 當發送方連接到服務器而不是接收方時。

        在這種情況下,當接收方未連接到服務器時,消息存儲在數據庫中,當接收方連接到服務器時,消息從數據庫中提取并轉發給接收方,這個就是離線消息的作用。

        2.當發送方未連接到服務器時。

        在這種情況下,當發送方未連接到服務器時,發送方發送的消息將保存在設備本地存儲中(可能是SQLite或基于平臺的任何其他內容)。當發送者聯機或連接到服務時,消息將從本地存儲中提取并發送到服務器。這個就是本地存儲的作用。

        3.當兩個客戶端都連接到服務器時:

        在這種情況下,當兩個客戶端都連接到服務器時,發送方發送消息,服務器將該消息轉發給接收方,而不將消息存儲到數據庫或設備本地存儲器。

        需要知道的一件事是,連接總是由客戶機啟動的,因為服務器不知道客戶機的地址,但客戶機知道服務器的地址。

        發送、交付和查看三個狀態

        發送:當我們發送一條消息,而該消息被Whatsapp服務器接收時。

        已傳遞:當消息從Whatsapp服務器傳遞到接收方時。

        已查看:當信息被接收者看到/打開時。

        為了合并所有這些狀態更改,每條消息都有一個唯一的,用于標識每條消息以及來自各種事件(已發送/已交付/已查看)的確認。

        當客戶端連接到服務器時,Whatsapp服務器內部會發生什么?

        當客戶端連接到WhatsApp服務器時,將針對該客戶端創建一個進程(或線程)。此流程負責處理與該客戶機相關的所有操作。

        每個進程都有一個隊列(以淺綠色突出顯示),作為該進程的緩沖區。創建流程后,將在數據庫中創建一個表,以維護P(流程)和關聯客戶機的記錄。

        Last Seen是怎么回事?

        這個特性的實現非常簡單和直接,它只需要維護一個帶有客戶機和時間戳的記錄。

        我們在智能手機中打開Whatsapp時,我們的應用程序每5秒向服務器發送一個脈沖,并且隨著每個脈沖蕞后一次出現,表中的時間會更新。當客戶端斷開連接時,記錄中存在上次看到的時間,該時間由關閉應用程序之前發送的蕞后一個脈沖更新。

        媒體共享是如何運作的?

        對于共享,我們不使用用于發送文本消息的連接,因為它是一個非常輕量級的連接,無法處理這么多負載。

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

        當我們共享一個媒體時,它會通過不同的連接上傳到HTTP服務器,成功上傳后,HTTP服務器會返回一個與該媒體相關聯的哈希值或唯一,該哈希值會發送到WhatsApp服務器。在接收方端,同樣的事情以相反的方式工作,接收方接收哈希值,然后從與該哈希值關聯的HTTP服務器下載媒體。

        電話服務也以與媒體服務相同的方式工作,為此,我們還使用不同的服務器,并使用不同類型的連接(如套接字等)進行實時通信。

        OpenIM github開源地址:

        github/OpenIMSDK/Open-IM-Server

        OpenIM官網 :特別rentsoft

        OpenIM官方論壇:forum.rentsoft

        我們致力于通過開源模式,為全球企業/開發者提供簡單、易用、高效的IM服務和實時音視頻通訊能力,幫助開發者降低項目的開發成本,并讓開發者掌控業務的核心數據。

        IM作為核心業務數據,安全的重要性毋庸置疑,OpenIM開源以及私有化部署讓企業能更放心使用。

        如今IM云服務商收費高企,如何讓企業低成本、安全、可靠接入IM服務,是OpenIM的歷史使命,也是我們前進的方向。

        如您有技術上面的高見請到我們的論壇聯系溝通,用戶也可與我們的技術人員探討使用方面的難題以及見解



         
        (文/沙海萍)
        免責聲明
        本文僅代表作發布者:沙海萍個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
         

        Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

        粵ICP備16078936號

        微信

        關注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯系
        客服

        聯系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號: weishitui

        客服001 客服002 客服003

        工作時間:

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

        反饋

        用戶
        反饋

        无码专区永久免费AV网站| 人妻丰满熟妞av无码区| 无码AV大香线蕉| 亚洲乱码无码永久不卡在线| 亚洲一区无码中文字幕| 成人无码午夜在线观看| 中文字幕日韩第十页在线观看| 99在线精品国自产拍中文字幕| 日日摸日日碰夜夜爽无码| 天堂Aⅴ无码一区二区三区| 亚洲色中文字幕无码AV| 无码日韩人妻AV一区免费l| 国产三级无码内射在线看| 亚洲日韩欧洲无码av夜夜摸| 欧美日韩v中文字幕| 中文成人无码精品久久久不卡| av无码国产在线看免费网站| 亚洲国产精品无码久久| 最新国产AV无码专区亚洲| 亚洲天堂2017无码中文| 最新版天堂中文在线| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 日韩欧群交P片内射中文| AAA级久久久精品无码片| 久久男人Av资源网站无码软件| 国产午夜精华无码网站| 中文字幕亚洲综合久久菠萝蜜| 亚洲日本va午夜中文字幕久久| 天堂中文在线资源| 久久中文精品无码中文字幕| 91天日语中文字幕在线观看| 欧美日韩中文字幕2020| 天堂а√中文在线| 亚洲欧美日韩在线不卡中文 | 高清无码中文字幕在线观看视频| 精品中文高清欧美| 合区精品中文字幕| 国产丝袜无码一区二区三区视频| 亚洲中文久久精品无码| 亚洲∧v久久久无码精品| 日韩AV无码中文无码不卡电影|