寰炲鎴剁鐨勮搴︿締璜�?w霉)鍕旇嬁?d貌ng)绔疘M鐨勬秷鎭彲闈犳€у拰閫侀仈(d谩)姗�(j墨)鍒�
IM App 鏄垜鍋氶亷 App 椤炲瀷閲屽京(f霉)闆滃害鏈€楂樼殑涓€椤�锛岄噷闈㈠彲渚涙繁绌舵帰瑷庣殑鎶€琛�(sh霉)闆i粸(di菐n)闈炲父涔嬪銆傞€欑瘒鏂囩珷鍜屽ぇ瀹惰亰涓嬪緸绉诲嫊(d貌ng)绔鎴剁鐨勮搴︽墍闂�(gu膩n)娉ㄧ殑IM娑堟伅鍙潬鎬у拰閫侀仈(d谩)姗�(j墨)鍒讹紙鍥�?y脿n)妲茶鈧�(g猫)浜哄皪(du矛)绉诲嫊(d貌ng)瀹㈡埗绔殑缍�(j墨ng)椹�(y脿n)绌嶇疮鐨勬瘮杓冭睈瀵屽槢锛�銆�
TCP鍗�(xi茅)璀扮殑鍙潬鎬т箣澶栭倓鏈�(hu矛)鍑虹従(xi脿n)娑堟伅涓熷け锛�
濡備綍纰轰繚 IM 涓嶄笩娑堟伅鏄€�(g猫)鐩稿皪(du矛)寰�(f霉)闆滅殑瑭遍锛屽緸瀹㈡埗绔櫦(f膩)閫佹暩(sh霉)鎿�(j霉)鍒版湇鍕�(w霉)鍣�锛屽啀寰炴湇鍕�(w霉)鍣ㄦ姷閬�(d谩)鐩(bi膩o)瀹㈡埗绔�锛屾渶绲傚湪 UI 鎴愬姛灞曠ず锛屽叾闁撴秹鍙婄殑鐠�(hu谩n)绡€(ji茅)寰堝锛岄€欓噷鍙彇鍏朵腑涓€鐠�(hu谩n)銆屾帴鏀剁濡備綍纰轰繚娑堟伅涓嶄笩澶便€嶄締鎺㈣◣锛岀矖鐣ヨ亰涓嬫垜鎺ヨЦ閬庣殑鍏╃ó瑷�(sh猫)瑷�(j矛)鎬濊矾銆�
瑾埌鍙潬鎶甸仈(d谩)锛岀涓€鍙嶆噳(y墨ng)鏈�(hu矛)鑱�(li谩n)鎯冲埌 TCP 鐨� reliability銆傛暩(sh霉)鎿�(j霉)鍙潬鎶甸仈(d谩)鏄€�(g猫)閫氱敤鎬х殑鍟忛锛岀劇璜栨槸缍�(w菐ng)绲�(lu貌)浜岄€�(j矛n)鍒舵祦鏁�(sh霉)鎿�(j霉)锛岄倓鏄笂灞ょ殑妤�(y猫)鍕�(w霉)鏁�(sh霉)鎿�(j霉)锛岄兘鏈夊彲闈犳€т繚闅滃晱椤�锛孴CP 浣滅偤缍�(w菐ng)绲�(lu貌)鍩虹(ch菙)瑷�(sh猫)鏂藉崝(xi茅)璀�锛屽叾鍙潬鎬цō(sh猫)瑷�(j矛)鐨勫彲闈犳€ф槸姣嬪焊缃枒鐨勶紝鎴戝€戝氨寰� TCP 鐨勫彲闈犳€ц璧�銆�
鍦� TCP 閫欎竴灞�锛屾墍鏈� Sender 鐧�(f膩)閫佺殑鏁�(sh霉)鎿�(j霉)锛屾瘡涓€鍊�(g猫) byte 閮芥湁妯�(bi膩o)铏�(h脿o)锛圫equence Number锛夛紝姣忓€�(g猫) byte 鍦ㄦ姷閬�(d谩)鎺ユ敹绔箣鍚庨兘鏈�(hu矛)琚帴鏀剁杩斿洖涓€鍊�(g猫)纰鸿獚(r猫n)淇℃伅锛圓ck Number锛�锛� 浜岃€呴棞(gu膩n)绯荤偤 Ack = Seq + 1銆傜啊鍠締瑾�锛屽鏋� Sender 鐧�(f膩)閫佷竴鍊�(g猫) Seq = 1锛岄暦搴︾偤 100 bytes 鐨勫寘锛岄偅涔� receiver 鏈�(hu矛)杩斿洖涓€鍊�(g猫) Ack = 101 鐨勫寘锛屽鏋� Sender 鏀跺埌浜嗛€欏€�(g猫)Ack 鍖�锛岃鏄庢暩(sh霉)鎿�(j霉)纰哄(sh铆)琚� Receiver 鏀跺埌浜�锛屽惁鍓� Sender 鏈�(hu矛)閲囧彇鏌愮ó绛栫暐閲嶇櫦(f膩)涓婇潰鐨勫寘銆�
绗竴鍊�(g猫)鍟忛鏄細鐝�(xi脿n)鍦ㄧ殑 IM App 骞句箮閮芥槸璧� TCP 閫氶亾锛屾棦鐒� TCP 鏈韩鏄叿鍌欏彲闈犳€х殑锛岀偤浠€涔堥倓鏈�(hu矛)鍑虹従(xi脿n)娑堟伅鎺ユ敹绔紙Receiver锛変笩澶辨秷鎭殑鎯呮硜锛岀湅涓嬪湒涓€鐩簡鐒讹細
涓€鍙ヨ┍绺界祼(ji茅)涓婂湒鐨勫惈缇╋細缍�(w菐ng)绲�(lu貌)灞ょ殑鍙潬鎬т笉绛夊悓浜庢キ(y猫)鍕�(w霉)灞ょ殑鍙潬鎬с€�
鏁�(sh霉)鎿�(j霉)鍙潬鎶甸仈(d谩)缍�(w菐ng)绲�(lu貌)灞や箣鍚�锛岄倓闇€瑕佷竴灞ゅ堡寰€涓婄Щ浜よ檿鐞�锛屽彲鑳界殑铏曠悊鏈夛細瀹夊叏鎬ф牎椹�(y脿n)锛宐inary 瑙f瀽锛宮odel 鍓�(chu脿ng)寤猴紝瀵� db锛屽瓨鍏� cache锛孶I 灞曠ず锛屼互鍙婁竴浜� edge cases锛堟柗缍�(w菐ng)锛岀敤鎴� logout锛宒isk full锛孫OM锛宑rash锛岄棞(gu膩n)姗�(j墨)銆傘€傦級 绛夌瓑锛岄爡(xi脿ng)鐩殑 feature 瓒婂锛岀恫(w菐ng)绲�(lu貌)灞ゅ線涓婄殑铏曠悊鍑洪尟(cu貌)鐨勫彲鑳芥€у氨瓒婂ぇ銆�
鑸夊€�(g猫)鏈€绨″柈鐨勫牬(ch菐ng)鏅偤渚嬪瓙锛氭秷鎭彲闈犳姷閬�(d谩)缍�(w菐ng)绲�(lu貌)灞や箣鍚�锛屽 db 涔嬪墠 App crash锛堜笉绋€濂�锛屾槸 App 閮芥渻(hu矛) crash锛�锛岄洊鐒舵暩(sh霉)鎿�(j霉)鍦ㄧ恫(w菐ng)绲�(lu貌)灞ゅ彲闈犳姷閬�(d谩)浜�锛屼絾娌掑瓨閫�(j矛n) db锛屼笅娆$敤鎴舵墦闁� App 娑堟伅鑷劧灏变笩澶变簡锛屽鏋滀笉鍦ㄦキ(y猫)鍕�(w霉)灞ゅ啀澧炲姞鍙潬鎬т繚闅�锛岀恫(w菐ng)绲�(lu貌)灞ら潰涓嶆渻(hu矛)閲嶇櫦(f膩)锛岄偅涔堟剰鍛宠憲閫欐娑堟伅灏�(du矛)浜� Receiver 姘搁仩(yu菐n)涓熷け浜�銆�
瀹㈡埗绔柟妗�1锛氭噳(y墨ng)鐢ㄥ堡 Ack 娑堟伅
閫欏€�(g猫)鏂规鍙互绨″柈鐞嗚В鐐�锛屽皣 TCP 鐨� Ack 娴佺▼鍐嶈蛋涓€閬�锛屽湪鎳�(y墨ng)鐢ㄥ堡涔熸(g貌u)寤轰竴鍊�(g猫) Ack 娑堟伅锛屽湪鎳�(y墨ng)鐢ㄥ堡鍙潬鎬у緱鍒扮⒑瑾�(r猫n)锛堜竴鑸互瀛樺叆 db 鐐烘簴(zh菙n)锛屾洿婧�(zh菙n)纰鸿鏄簨鍕�(w霉)鎻愪氦鎴愬姛鐨勫洖瑾�(di脿o)鍑芥暩(sh霉)锛変箣鍚庡啀鐧�(f膩)閫侀€欏€�(g猫) Ack 娑堟伅锛孲erver 鏀跺埌鎳�(y墨ng)鐢ㄥ堡 Ack 娑堟伅涔嬪悗鎵嶈獚(r猫n)鐐� Receiver 宸叉敹鍒�锛屽惁鍓囦篃閲囧彇鏌愮ó绛栫暐閲嶇櫦(f膩)娑堟伅銆�
鍏烽珨鍒� IM App 鐣�(d膩ng)涓�锛屾帴鏀剁鎺ュ彈鍒� Server 鐨� Message锛屽皣 Message 瀛樺叆 db锛屽湪纰鸿獚(r猫n)鍥炶(di脿o)閲岀櫦(f膩)閫� Ack Receive 娑堟伅锛孲erver 鏀跺埌 Ack Receive 鍗宠獚(r猫n)鐐烘秷鎭凡缍�(j墨ng)鍙潬鎶甸仈(d谩)锛屽惁鍓囨渻(hu矛)鍦ㄦ煇鍊�(g猫)鏅�(sh铆)姗�(j墨)閲嶆柊鎺ㄩ€侊紙姣斿瀹㈡埗绔噸閫f湇鍕�(w霉)鍣ㄦ檪(sh铆)鍊� Pull锛屾瘮濡傛湁鏂版秷鎭檪(sh铆) Server Push锛夈€�
瀹㈡埗绔柟妗�2锛氭噳(y墨ng)鐢ㄥ堡 Seq ID
閫欏€�(g猫)鏂规鍜屼笂闈笉鍚�锛屼絾涔熸槸鍦ㄦ噳(y墨ng)鐢ㄥ堡鎿嶄綔銆傛垜鍊戝€�(g猫)姣忓€�(g猫) Message 鍒嗛厤涓€鍊�(g猫) Seq ID锛岄€欏€�(g猫) Seq ID 灏�(du矛)浜庡柈鍊�(g猫)鐢ㄦ埗鐨勬帴鍙楁秷鎭殜(du矛)鍒椾締瑾槸閫g簩(x霉)鐨�锛屽鏋� Message A 鍜� Message B 鏄浉閯扮殑锛岄偅涔� MsgBSeqID = MsgASeqID + 1銆傛瘡娆″瓨鍏� db 鐨勬檪(sh铆)鍊欐洿鏂� db 閲岀殑 LastReceivedSeqID锛孡astReceivedSeqID 鍗崇偤涓婁竴姊濆鍏ユ暩(sh霉)鎿�(j霉)搴秷鎭殑 Seq ID銆�
閫欎箞鍋氱殑濂借檿鏄�锛屾瘡娆″緸缍�(w菐ng)绲�(lu貌)灞ゆ敹鍒版秷鎭檪(sh铆)锛屽緸 db 閲屽彇鍑� LastReceivedSeqID锛屽鏋� LastReceivedSeqID = 鏂版秷鎭� Seq ID - 1锛岄偅涔堣鏄庢噳(y墨ng)鐢ㄥ堡娑堟伅鏅�(sh铆)閫g簩(x霉)鐨勬矑鏈夌櫦(f膩)鐢熶笩澶�銆傞倓鍙互灏�(du矛)鏀跺埌鐨勬壒閲忔秷鎭仛闋�(y霉)妾㈡脯(c猫)锛屾鏌ユ秷鎭殜(du矛)鍒楅噷鐨� Seq ID 鏄惁鐐鸿伅(li谩n)绯荤殑锛屽彧瑕佸瓨鍦ㄤ换浣曚竴绋笉閫g簩(x霉)鐨� Seq ID 鎯呮硜锛屽氨瑾槑鐧�(f膩)閫佷簡涓熷け锛屾鏅�(sh铆)鎺ユ敹绔彲浠ョ敤 LastReceivedSeqID 寰� Server 閲嶆柊鐛插彇婧�(zh菙n)纰虹殑鎺ュ彈娑堟伅闅�(du矛)鍒�銆�
閫欎箞鍋氱殑濂借檿鏄伩鍏嶄簡姣忔閮介渶瑕佺櫦(f膩)閫佷竴姊� Ack 娑堟伅锛屽铏曟槸鎳�(y墨ng)鐢ㄥ堡閭忚集寰�(f霉)闆滀箣鍚�锛屼竴鏃﹀嚭鐝�(xi脿n) Seq ID 涓嶉€g簩(x霉)鐨勬儏娉侊紝鏈�(hu矛)閬庡害渚濊炒浜� refetch锛岄洠浠ュ垎鏋愬晱椤屽嚭鐝�(xi脿n)鐨勫師鍥狅紝refetch 涓€鏃﹂亷浜庨牷绻�锛屽叾娴侀噺鎼嶈€楁サ鏈夊彲鑳藉ぇ浜� Ack 娑堟伅鐨勬暩(sh霉)鎿�(j霉)閲忋€�
鏈枃灏忕祼(ji茅)
娑堟伅鐨勫彲闈犳姷閬�(d谩)鍙互鎶借薄鐐烘洿涓€鑸剰缇╀笂鐨勫彲闈犳€у晱椤�锛屽伐绋嬩笂绺芥渻(hu矛)纰板埌闇€瑕佽В姹哄悇绋舰寮忓彲闈犳€у晱椤岀殑鍫�(ch菐ng)鏅�锛屼互缍�(j墨ng)鍏歌▓(j矛)绠楁(j墨)鐞嗚珫鎴栬€呭(sh铆)韪愮偤鍩虹(ch菙)渚嗗垎鏋愭噳(y墨ng)鐢ㄥ堡鐨勫伐绋嬪晱椤�锛屽彲浠ヨ垑涓€鍙嶄笁锛岃棩鍒扮梾闄ゃ€�
鍦ㄥ伐绋嬩笂瀵�(sh铆)韪愬彲闈犳€�锛岄渶瑕佺窔浜嗚В宸ョ▼鐨勬瘡涓€鍊�(g猫)鐠�(hu谩n)绡€(ji茅)浠ュ強鏁�(sh霉)鎿�(j霉)濡備綍鍦ㄥ悇鍊�(g猫)鐠�(hu谩n)绡€(ji茅)娴佸嫊(d貌ng)锛屾帴涓嬩締鎵嶆槸鍒嗘瀽姣忎竴鍊�(g猫)鐠�(hu谩n)绡€(ji茅)鏁�(sh霉)鎿�(j霉)鍑洪尟(cu貌)鐨勫彲鑳芥€�銆傛椹�(y脿n)鍙潬鎬х殑妯�(bi膩o)婧�(zh菙n)鏅�(sh铆)銆屽叆琚嬬偤瀹夈€嶏紝瀛樺叆 db 鎴栬€呬互鍏朵粬鏂瑰紡鎸佷箙鍖栧埌 disk 鐣�(d膩ng)涓�锛岄€欐ǎ鎵嶈兘淇濊瓑瀹㈡埗绔瘡娆¢兘鑳芥纰鸿畝鍙栧埌娑堟伅銆�
鍙﹀锛屽彲闈犳€у彲浠ョ悊瑙g偤鍏╂柟闈細
路 涓€鏄暩(sh霉)鎿�(j霉)鍙潬鎶甸仈(d谩)锛堟矑鏈変换浣曚腑闁撴暩(sh霉)鎿�(j霉)琚笩澶憋級锛�
路 浜屾槸姝g⒑鎶甸仈(d谩)锛堟矑鏈変簜搴忔垨鑰呮暩(sh霉)鎿�(j霉)鏇存敼锛夈€�
鍏跺(sh铆)鐞嗚珫涓� TCP 涔熶笉鏄� 100% 鍙潬锛堟暩(sh霉)鎿�(j霉)鏈夊彲鑳藉湪鍌宠几鏅�(sh铆)鏀硅畩鑰岀劇娉曡妾㈡脯(c猫)鍒帮級锛岃€屾槸 100% 宸ョ▼涓婂彲闈狅紙鏁�(sh霉)鎿�(j霉)鏀硅畩鑰屼笉琚娓�(c猫)鍒版檪(sh铆)鍊�(g猫)妤靛皬姒傜巼鐨勪簨浠讹級锛岄€欐槸鍙﹀涓€鍊�(g猫)鏈夋剰鎬濈殑瑭遍銆�