日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IM即时通讯项目框架分析

發(fā)布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IM即时通讯项目框架分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1 IM即時通訊項目框架分析和部署

1. 即時通訊框架分析和部署
2. 登錄服務(wù)器和消息服務(wù)器設(shè)計
3. 路由服務(wù)器設(shè)計
4. 數(shù)據(jù)庫代理服務(wù)器設(shè)計
5. 文件服務(wù)器和docker部署
6. 性能測試和k8s上云發(fā)布

1.1 即時通訊應(yīng)用場景

即時通訊技術(shù)應(yīng)用非常廣泛,涉及教育、電商、金融、泛娛樂、生活服務(wù)、醫(yī)療健康、 政企服務(wù)、游戲聊天、在線客服等等行業(yè),以下以部分典型應(yīng)用作為簡介。 (一)教育 (二)電商 (三)金融 (四)泛娛樂 (五)招聘 (六)醫(yī)療健康 (七)政企服務(wù) (八)游戲類產(chǎn)品 提供:即時通訊、用戶點對點聊天、主播互動、實時彈幕、 實時監(jiān)控、遠(yuǎn)程控制、多人互動、位置共享

1.2 即時通訊提供商

容聯(lián) 融云 環(huán)信 http api 網(wǎng)易云信 QQ通訊 詳細(xì)對比:https://blog.csdn.net/weixin_33739646/article/details/ 每天發(fā)信息不過 10000 條 大部分場景下自研成本比使用第三方的高 自研的優(yōu)勢:可控

1.3 即時通訊開源項目

C++: teamtalk
Go:GoBelieve goim
Java:openfire

2.1 即時通訊的基本架構(gòu)

客戶端與服務(wù)器端進(jìn)行網(wǎng)絡(luò)通信、收發(fā)消息 連接層為客戶端收發(fā)消息提供出入口。主 要的任務(wù):保持海量用戶連接;解析協(xié)議, 對傳輸內(nèi)容進(jìn)行編碼;維護(hù)session;推送 消息。 核心業(yè)務(wù)層負(fù)責(zé)IM系統(tǒng)各項功能的核心邏 輯實現(xiàn)。 數(shù)據(jù)層負(fù)責(zé)IM系統(tǒng)相關(guān)數(shù)據(jù)的持久化存儲, 包括消息內(nèi)容、賬號信息等。

2.2 IM技術(shù)的特點

  • 實時性 :保證消息實時觸達(dá)。(輪詢與長連接)(消息提示推送,和我們閱讀的消
    息是不一樣的。)
  • 可靠性 :保證消息的不丟失和不重復(fù)。(ACK 機(jī)制)
    TCP 只能保證消息數(shù)據(jù)鏈路可靠,不能保證業(yè)務(wù)可靠。
  • 一致性 :保證同一條消息在多人、多終端展現(xiàn)順序的一致性。(消息序號生成器)
  • 安全性 :保證數(shù)據(jù)傳輸安全、數(shù)據(jù)存儲安全、消息內(nèi)容安全。(HTTPDNS 和TLS)
  • 3 即時通訊分層架構(gòu)

    即時通訊系統(tǒng)常用分層架構(gòu) 接入層:entry/gate 邏輯層:logic 數(shù)據(jù)層:data 路由層:route

    3.1 即時通訊分層架構(gòu)-接入層

    接入層的作用: ? 連接整流 ? 通信安全 ? 報文解壓縮 ? 初步防攻擊

    3.1接入層-連接整流和通信安全


    3.1接入層-報文解壓縮和初步防攻擊


    3.2 即時通訊分層架構(gòu)-邏輯層

    1. 用戶邏輯 :用戶登錄、用戶退出、用戶信息查詢、用戶更新簽
    名、用戶分組創(chuàng)建等
    2. 好友邏輯 :添加好友、刪除好友、拉取好友列表、好友添加備
    注等
    3. 群組邏輯 :創(chuàng)建群、加入群、刪除群、刪除成員等
    4. 消息邏輯 :單聊文字消息、單聊語音消息、群聊文字消息、群
    聊語音消息、拉取離線消息等
    5. 其他 ,比如文件傳輸、圖片傳輸?shù)?/p>

    3.2 邏輯層設(shè)計核心-擴(kuò)展性

  • 水平擴(kuò)展各個邏輯模塊
  • 無縫添加新的邏輯服務(wù),比如文件傳輸
  • 3.3 即時通訊分層架構(gòu)-數(shù)據(jù)層

    1. 對上游屏蔽存儲引擎
    2. 對上游屏蔽cache層
    3. 對上游提供友好接口

    3.3.1 數(shù)據(jù)層-屏蔽存儲引擎

    3.3.2 數(shù)據(jù)層-屏蔽cache層

    3.3.3 數(shù)據(jù)層-提供友好接口

    3.3.4 數(shù)據(jù)層-擴(kuò)展性

    3.4 即時通訊分層架構(gòu)-路由層

  • 路由消息:消息投遞
  • 內(nèi)存存儲:用戶臨時數(shù)據(jù),比如用戶
    狀態(tài)信息(在線/離線)
  • 3.4. 1 路由層-路由消息

    4 Teamtalk

    為什么學(xué)習(xí)Teamtalk: ? CloudTalk 基于Teamtalk進(jìn)行二次開發(fā) ? xx公司基于Teamtalk進(jìn)行二次開發(fā)

    5 即時通訊項目

  • Android/iOS/PC:各種客戶端。
  • LoginServer: 主要負(fù)責(zé)負(fù)載均衡的作用,當(dāng)收到客戶端的請求時,分配一個負(fù)載最小的
    MsgServer給客戶端。
  • MsgServer: TT的主要服務(wù)端,負(fù)責(zé)維護(hù)各個客戶端的鏈接,消息轉(zhuǎn)發(fā)等功能。
  • RouteServer:負(fù)責(zé)消息路由的功能,當(dāng)msg_server發(fā)現(xiàn)某個用戶不在本服務(wù)器內(nèi),而又有消
    息需要發(fā)給他,就會將消息轉(zhuǎn)發(fā)給route_server,route_server會將消息發(fā)給相應(yīng)的
    msg_server,由此可知,route_server也維護(hù)了一定的用戶狀態(tài)。
  • DBProxy:在TT中負(fù)責(zé)了主要的業(yè)務(wù)邏輯,主要與存儲層打交道,提供mysql以及redis的訪問
    服務(wù),屏蔽其他服務(wù)器與mysql與redis的直接交互。
  • FileServer:文件服務(wù)器,提供客戶端之間得文件傳輸服務(wù),支持在線以及離線文件傳輸
  • MsfsServer:圖片存儲服務(wù)器,提供頭像,圖片傳輸中的圖片存儲服務(wù)。
  • PushServer:負(fù)責(zé)Android、IOS客戶端提醒消息的推送,類似微信的鎖屏提醒消息。
  • Webserver:簡單的管理功能。
  • 6.1 我們能從中學(xué)到什么

  • 基礎(chǔ)組件封裝:thread、ringfifo等
  • Epoll網(wǎng)絡(luò)庫封裝(客戶端服務(wù)端)
  • HTTP模塊封裝
  • HTTP api實戰(zhàn)
  • HTTPs
  • Wesocket
  • protobuf實戰(zhàn)
  • json
  • MySQL連接池
    10.Redis連接池
    11.線程池
    12.數(shù)據(jù)庫實戰(zhàn)
    13.小文件存儲系統(tǒng)原理
    14.音視頻集成到即時通訊
    15.即時通訊技術(shù)的原理和實戰(zhàn)
    1. 消息單聊(消息id)
    2. 消息群聊(分表的設(shè)計)
    3. 消息推送和拉取
  • 6.2 即時通訊重點

    實時性
    ? http
    ? socket
    ? websocket

    數(shù)據(jù)庫
    ? 數(shù)據(jù)庫表設(shè)計
    ? 分表設(shè)計
    ? 密碼存儲方式
    ? 最近會話表
    ? 未讀消息如何體現(xiàn)
    ? 聊天消息分表問題

    單聊消息發(fā)送流程 ? 怎么保證數(shù)據(jù)的不丟失 ? 消息序號在哪里生成 ? 消息序號生成方式 ? 消息如何封裝 ? 消息發(fā)送時的seq有什么作用 ? 消息發(fā)送后服務(wù)器怎么應(yīng)答? ? 接收端收到數(shù)據(jù)后如何應(yīng)答 客戶端的單聊消息未讀計數(shù)是怎么實現(xiàn)的 ? 服務(wù)器怎么保留消息未讀計數(shù) ? 客戶端的未讀消息計數(shù)從何而來 ? 客戶端未讀消息計數(shù)清 0 時向服務(wù)器發(fā)送了什么,服務(wù)器 又是怎么清除未讀消息計數(shù) 文件傳輸原理 ? 文件傳輸分為在線傳輸離線傳輸 ? 在線傳輸和離線傳輸有什么區(qū)別 群聊消息 ? 如何推送群聊 ? 群消息計數(shù)器 ? 群會話如何更新(每有一個人發(fā)送消 息,則其他人都需要更新會話消息) 群成員管理 ? 如何創(chuàng)建群 ? 如何刪除群 ? 怎么使用redis管理群成員 MySQL連接池設(shè)計 ? 為什么使用連接池 ? 連接池設(shè)置多大合適? redis連接池設(shè)計 ? 為什么使用連接池 ? 連接池設(shè)置多大合適? 并發(fā)能力 ? 如何做到百萬并發(fā) ? 如何做到千萬并發(fā)

    7.1 即時通訊項目部署

    1.保證redis正常運行; 2.保證mysql正常運行; 3.保證php正常運行; 4.保證nginx正常運行; 5.保證php正常運行,這里的php主要是web管理平臺的使用; 6.protobuf版本庫目前server端是2.0的版本,Android_av使用了3.0的版 本 7.web服務(wù)器需要nginx支持; 8.服務(wù)不啟動的時候主要查看log是否正常。

    7.2 配置文件重點 1

    loginserver.conf負(fù)載均衡服務(wù) HttpPort:對應(yīng)提供HTTP服務(wù)的端口,默認(rèn) 8080 MsgServerPort:msg服務(wù)器上報監(jiān)聽的端口,默認(rèn) 8100 msgserver.conf 消息服務(wù) ListenPort:連接msg服務(wù)器需要的端口 LoginServerIP1:上報msg服務(wù)器負(fù)載的地址 LoginServerPort1:上報msg服務(wù)器負(fù)載的端口 RouteServerIP1:route服務(wù)器地址和端口 RouteServerPort1: PushServerIP1:push推送服務(wù)器地址和端口 PushServerPort1: FileServerIP1:文件傳輸服務(wù)器地址和端口 IpAddr1:對外提供的往外ip,需要上報給login 服務(wù)器 dbproxyserver.con 數(shù)據(jù)庫中間件服務(wù) ListenPort:該服務(wù)監(jiān)聽的端口 ThreadNum:線程池線程數(shù)量 DBInstances=teamtalk_master,teamtalk_slave配置數(shù)據(jù)庫實例 #teamtalk_master teamtalk_master_host=127.0.0.1 數(shù)據(jù)庫ip teamtalk_master_port=3306 數(shù)據(jù)庫端口 teamtalk_master_dbname=teamtalk 數(shù)據(jù)庫名字 teamtalk_master_username=root 用戶名 teamtalk_master_password=123456 密碼 teamtalk_master_maxconncnt=16 連接池最大連接數(shù)量 #未讀消息計數(shù)器的redis unread_host=127.0.0.1 redis地址 unread_port=6379 redis端口 unread_db=1 db索引 unread_maxconncnt=16 連接池最大連接數(shù)量

    routeserver.conf 路由服務(wù)
    ListenIP=0.0.0.0 該服務(wù)監(jiān)聽ip
    ListenMsgPort=8200 該服務(wù)監(jiān)聽端口

    7.2 配置文件重點 2

    fileserver.conf文件傳輸服務(wù)
    ClientListenIP=0.0.0.0 該服務(wù)監(jiān)聽的地址
    ClientListenPort=8600 該服務(wù)監(jiān)聽的端口,
    供msg server連接

    httpmsgserver.conf HTTP reset api服務(wù) ListenPort=8400 該服務(wù)監(jiān)聽 ConcurrentDBConnCnt=4 db_proxy服務(wù)連接通道數(shù)量 DBServerIP1=127.0.0.1 db_proxy服務(wù)地址 DBServerPort1=10600 DBServerIP2=127.0.0.1 DBServerPort2=10600 RouteServerIP1=localhost route路由服務(wù)地址 RouteServerPort1=8200 msfs.conf 文件存儲服務(wù) ListenIP=0.0.0.0 #可以監(jiān)聽多個IP,用;分割 ListenPort=8700 該服務(wù)端口 BaseDir=./tmp 存儲地址 FileCnt=0 最大文件數(shù)量 FilesPerDir=30000 每個目錄最大存儲文件 GetThreadCount=32 下載線程 PostThreadCount=1 上傳線程 pushserver.conf 推送服務(wù) ListenIP=127.0.0.1 ListenPort=8500 該服務(wù)監(jiān)聽端口 CertPath=apns-dev-cert.pem KeyPath=apns-dev-key.pem KeyPassword=tt@mogujie #SandBox #1: sandbox 0: production SandBox=0

    8 通信協(xié)議解析

    總結(jié)

    以上是生活随笔為你收集整理的IM即时通讯项目框架分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。