gim架構(gòu)實戰(zhàn)

大家好,我是dandyhuang肄满。記憶中稠歉,從大學接觸編程開始,就覺得qq怒炸,wx這些聊天很神奇阅羹。就一直想弄明白它是怎么做的。直到畢業(yè)后捏鱼,工作了一段時間這是根im相關(guān)的知識穷躁。golang中im鼻祖應該是毛老師(毛劍)的goim了因妇。本期咱們還不做改代碼分析猿诸,我們暫時簡單的分析一下gim的實現(xiàn)。

gim

gim中址芯,設(shè)計還是比較清晰的窜觉,花幾天時間,基本上就搞清楚了旬陡。主要分為connect语婴、logic、business三大模塊匿醒,內(nèi)部通過websocket缠导、tcp、grpc協(xié)議進行通訊憋他。思想理念和goim基本一致嫡意。涉及的中間件很少,所以建議看完gim再去看goim此迅,會更容易理解一些旧巾。但gim還有很多缺陷,未完善坎怪,如果要使用到生產(chǎn)環(huán)境廓握,還需要在做一定的修改嘁酿。

gim.png
  1. connect
    維持與客戶端的TCP和WebSocket長連接闹司,心跳沐飘,以及TCP拆包粘包。通過connect發(fā)送消息編解碼數(shù)據(jù)借卧。如a筛峭、b同時和connect創(chuàng)建連接。a向b發(fā)送數(shù)據(jù)滨达,通過先發(fā)送給connect俯艰,connect在中轉(zhuǎn)到b锌订。
  2. logic
    設(shè)備信息辆飘,好友信息,群組信息管理蜈项,消息轉(zhuǎn)發(fā)邏輯
  3. business
    一個簡單的業(yè)務服務器服務紧卒,可以根據(jù)自己的業(yè)務需求,進行擴展,但是前提是轴总,你的業(yè)務服務器實現(xiàn)了business.int.proto接口

設(shè)備注冊和用戶登錄

login.png
  1. 當設(shè)備和用戶未注冊時博个,需要調(diào)用注冊接口⊥ぃ客戶端可以根據(jù)自身設(shè)備id和用戶id判斷是否注冊完成
  2. 當注冊成功,向connect發(fā)起ws/tcp鏈接养葵。connect會校驗鏈接的設(shè)備是否合法瘩缆,失敗關(guān)閉連接庸娱。成功返回登錄成功消息。
  3. connect創(chuàng)建設(shè)備和connect句柄映射關(guān)系熟尉。
  4. 創(chuàng)建協(xié)程斤儿,發(fā)送心跳包,維持ws和tcp之間的連接往果。conn.WS.SetReadDeadline和gn.WithTimeout(11*time.Minute)陕贮。心跳周期需要小于服務端連接的時間
  5. 創(chuàng)建協(xié)程肮之,獲取離線消息同步信息
  6. 創(chuàng)建協(xié)程戈擒,獲取訂閱獲取廣播消息

發(fā)送消息

sendmsg.png
  1. client A發(fā)送grpc消息給logic服務筐高。
  2. logic校驗A的信息和要發(fā)送的用戶B凯傲。
  3. 持久化信息,獲取用戶B登錄的所有設(shè)備冰单,并將信息發(fā)送給Connect
  4. Connect獲取對應要發(fā)送的設(shè)備的Conn句柄,發(fā)送websocket/tcp信息給B

大家可以添加我的wx一起探討

我是dandyhuang_涵卵,碼字不易,點個小贊轿偎,只希望大家能更加明白

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坏晦,一起剝皮案震驚了整個濱河市昆婿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仓蛆,老刑警劉巖看疙,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異施禾,居然都是意外死亡相味,警方通過查閱死者的電腦和手機丰涉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門斯碌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來傻唾,“玉大人,你說我怎么就攤上這事冠骄×堇保” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵防泵,是天一觀的道長捷泞。 經(jīng)常有香客問我,道長锁右,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮响蕴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辖试。我一直安慰自己劈狐,他們只是感情好,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著续膳,像睡著了一般坟岔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上承疲,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天鸥咖,我揣著相機與錄音,去河邊找鬼啼辣。 笑死啊研,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悲伶,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼艾恼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了麸锉?” 一聲冷哼從身側(cè)響起钠绍,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎花沉,沒想到半個月后柳爽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡碱屁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了娩脾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赵誓。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖柿赊,靈堂內(nèi)的尸體忽然破棺而出俩功,到底是詐尸還是另有隱情,我是刑警寧澤碰声,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布诡蜓,位于F島的核電站,受9級特大地震影響胰挑,放射性物質(zhì)發(fā)生泄漏蔓罚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一瞻颂、第九天 我趴在偏房一處隱蔽的房頂上張望豺谈。 院中可真熱鬧,春花似錦贡这、人聲如沸核无。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至噪沙,卻和暖如春炼彪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背正歼。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工辐马, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人局义。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓喜爷,卻偏偏與公主長得像冗疮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子檩帐,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容