對於新派單通知、訂單時效變動通知等須要及時反饋給用戶的消息,目前點我達騎手的解決方案是定時輪詢並經過http請求的方式主動從服務器獲取變動,這種方式存在必定的缺陷,如http方式輪詢流量消耗較高、消息通知不及時等。隨着訂單量和活躍用戶量的急劇增長,這種輪詢方式的弊端也逐漸顯現出來,須要一種可以及時發送消息且流量消耗較低、弱網環境表現優異的方案替代現有輪詢方案,那就是Socket長鏈接的方式。python
Android客戶端實現Socket長鏈接的框架有大名鼎鼎的Netty和Mina,也有微信團隊開源的跨平臺基礎網絡框架Mars,也就是本文要介紹的網絡框架。android
Mars是==微信官方==推出的C++編寫的跨平臺、跨業務的終端基礎組件,能夠直接在Android、iOS、Mac等平臺使用。框架包含Common、STN、SDT、XLog等模塊,下圖爲Mars官方提供的架構圖:git
各模塊的主要功能以下:github
1.Common:Mars框架最底層部分,爲STN、XLOG、SDT模塊提供組件支持,主要包括socket、線程、消息隊列、協程等基礎工具。服務器
2.STN:信令分發網絡模塊,也是 Mars 最主要的部分,能夠認爲是Mars框架中的網絡框架組件,是跨平臺的 socket 層解決方案,主要負責終端與服務器的小數據信令通道。包含了微信終端在移動網絡上的大量優化經驗與成果,經歷了微信海量用戶的考驗。微信
3.SDT:網絡診斷模塊,能夠經過ping、dns、tcp等方式檢測網絡情況,並可以進行流量的統計。網絡
4.XLOG:高性能運行期日誌組件,能夠經過穿越門獲取更多關於Xlog的信息。架構
框架介紹向來都是高端大氣的,在使用過程當中是否真的可以作到高可用,高性能,負載均衡?Mars的五年的發展史和微信官方使用意味着這會是不錯的移動APP Socket解決方案,在github上開源後已經有近萬的star和近兩千的fork,微信團隊也曾公開表示會持續對Mars維護。負載均衡
Mars於2016年12月28日被微信團隊開源,github地址是https://github.com/Tencent/mars ,因此能夠根據需求對源碼進行改造來知足項目使用要求。 以github提供的demo爲例,簡要闡述下環境搭建的步驟。框架
1.下載源碼
從Mars代碼倉庫中pull出代碼後,代碼的組織結構是這樣的:
其中mars部分爲框架的C++源碼部分,Mars中的SDT、STN、XLOG等模塊的源碼都在這裏,若有必要,能夠對源碼進行改造。
samples爲在Mac、Android、iOS等平臺集成的demo工程,Server爲簡易搭建的服務器端代碼工程,咱們將使用Server+android兩個工程構建簡易的demo環境並進行Socket通信。
2.Server環境搭建
將目錄切換到/mars-master/samples/Server後會有一個start-server.py python腳本,使用python start_server.py執行該腳本並選擇對應的編譯平臺,編譯完成後,在mac電腦上出現以下兩個彈窗:
至此,Server端的工程已經運行完畢,在Client端只須要將鏈接的服務器地址配置成本身server的IP便可。
3.Client環境搭建(以Android爲例)
android工程的sample代碼在/mars-master/samples/android目錄下,將該目錄的代碼導入到AndroidStudio後,全局搜索marsopen.cn字符串替換成步驟2中運行的Server的IP地址後便可運行。以mac操做系統爲例,在終端輸入ifconfig便可查看到當前電腦的IP地址,截圖以下:
運行成功後,Sample的界面是這樣子的:
須要注意的是,頁面中的STN Discuss、Xlog Discuss、SDT Discuss並不是是針對STN、Xlog、SDT這三個模塊的功能定製,這些文案都是從server中獲取後填充到RecyclerView中去的,只是爲了區分會話的惟一性,在同一個服務器IP地址的同一個模塊下才能進行IM通信。
4.簡易版IM軟件
其實Mars Sample就是一個簡單的IM軟件,點擊頁面的STN Discuss、Xlog Discuss、SDT Discuss中的任意一個便可進入聊天頁面。聊天頁面打開後,首先會彈窗建立一個暱稱(不建立也是能夠的),點擊肯定後開始跟在同一個Server的其餘用戶聊天。
Mars是一款基於TCP協議的Socket網絡框架,Mars與Android/iOS平臺中經常使用的網絡框架的對比清下以下:
Mars目前是不支持完整的Http請求方式的,不過微信官方已表示將集成Http請求方式做爲Mars後續開源的重要完善部分。由於Mars是微信團隊使用的基礎網絡框架,對於「移動互聯網」中網絡狀態不穩定等特色作了大量的優化工做,而且這些優化通過微信超大用戶量的長期驗證和使用的。
因爲開源時間(2016年末)較晚等緣由,Mars生態不夠完善,經過搜索引擎搜索到的關於Mars框架的內容也相對較少。但爲了表示微信官方對這一跨平臺、跨業務的socket解決方案的重視,github倉庫中的wiki含有大量微信官方撰寫的Blog,不只包含各平臺集成開發文檔,還包含一些Mars框架在微信團隊在5年的迭代過程當中的演進和優化,如Mars智能心跳方案的深刻介紹、應對弱網絡情況的解決方案、信令傳輸超時方案優化等。這些Blog對於Mars掃盲和框架集成是沒有太大的問題,但獨木難成林,將來的Mars生態必然依賴愈來愈多的框架使用者在使用過程當中的經驗累計和推廣,相信在微信官方的重視和廣大使用者的共同努力下,Mars的發展應該仍是不錯的。