本篇是工程開發的網絡一個分篇,總體見:https://segmentfault.com/a/11...。
概述
長鏈接本來核心只是消息推送和部分數據上報,通常公司裏面當成IM用的會比較多
後來演變成一個通道,不僅是IM,消息push,就連短鏈接也走這個通道。下降鏈接成本,端上到機房鏈接,尤爲是位置上報push等場景。統一作加密,在多點接入時能夠統一處理。segmentfault
native APP使用TCP直連長鏈接域名,經過LVS/TGW的轉發(gz機房爲FULLNAT模式,QQ機房貌似是TUNNEL模式),鏈接到某個CONNSVR的對外服務端口上(支持加密和非加密兩種),緩存
此時APP與CONNSVR完成了TCP的三次握手,而後開始業務層面的握手,握手過程以下:網絡
● 業務向push推送數據,可能提供uid,也可能提供role+phone進行索引
● 若是是role+phone的形式,則push須要向AAASVR發起請求,使用role+phone獲取uid,注意這裏會致使AAASVR的流量增大不少
● PUSHSVR使用uid向CONNMASTER請求,獲取用戶所在的CONNSVR
● PUSHSVR將數據推給CONNSVR,後者推給app
● 若是用戶不在線(step 3查詢失敗),或者CONNSVR發送失敗, 則PUSHSVR根據消息推送的不一樣策略(由業務方指定),決定是否將消息寫入REPUSHSVR,REPUSHSVR則會不停的將消息從新推回PUSHSVR進行重試架構
統一app