Mars -- 微信跨平臺跨業務基礎組件
Mars:https://github.com/Tencent/mars
Mars 是什麼
Mars 是微信官方的終端基礎組件, 是一個業務性無關,平臺性無關 使用C++ 編寫的基礎組件。目前已接入微信 Android、iOS、Mac、Windows、WP、UWP 等客戶端。注意:目前僅支持Android、iOS、Mac、Windows 平臺,其他平臺會在後續的版本中很快支持
它主要包括以下幾個部分:
- Comm:基礎庫,包括socket、線程、消息隊列、協程等基礎工具;
- Xlog:通用日誌模塊,充分考慮移動終端的特點,提供高性能、高可用、安全性、容錯性的日誌功能
- SDT:網絡診斷模塊;
- STN:信令傳輸網絡模塊,負責終端與服務器的小數據信令通道。包含了微信終端在移動網絡上的大量優化經驗與成果,經歷了微信海量用戶的考驗。
爲什麼使用 Mars
Mars | AFNetworking | OkHttp | |
---|---|---|---|
跨平臺 | yes | no | no |
實現語言 | C++ | Objective-C | Java |
具體實現 | 基於 socket | 基於 HTTP | 基於 HTTP |
支持完整的 HTTP | no | yes | yes |
支持長連 | yes | no | no |
DNS 擴展 | yes | no | yes |
結合移動 App做設計 | yes | no | no |
總的來說
- Mars 中包括一個完整的高性能的日誌組件 xlog;
- Mars 中 STN 是一個跨平臺的 socket 層解決方案,並不支持完整的 HTTP 協議;
- Mars 中 STN 模塊是更加貼合“移動互聯網”、“移動平臺”特性的網絡解決方案,尤其針對弱網絡、平臺特性等有很多的相關優化策略。
Mars 是一個結合移動 App 所設計的基於 socket 層的解決方案,在網絡調優方面有更好的可控性,不過對於 HTTP 完整協議的支持,已經考慮後續版本會加入。Mars在微信用的應用場景主要是:普通CGI請求類似收發消息收發語音,業務CGI支付請求等。
如果你想一次學習,多個平臺使用,Mars 是一個比較好的選擇,如果你面對的用戶是移動網絡下的用戶,Mars 更是一個比較好的選擇。但如果你只是想使用完整的 HTTP 協議,Mars暫時可能不適合你。如果你的應用中存在大量發送大數據的場景,Mars也不是一個好的選擇,不建議使用。
如何使用 Mars
在使用之前請務必先仔細閱讀以下文檔:
Mars Android 接入指南
Mars iOS/OS X 接入指南
Mars Windows 接入指南
Mars 常用術語
Mars 常見問題
Mars 自定義擴展
Mars sample 使用說明
xlog 編譯
所以本文記錄下windows下編譯Mars需要的配置,環境是windows10 64位。
一、安裝Python2.7
注意是 2.7,不要安全3.0及以上版本,否則可能編譯不過;
二、安裝NDK
這裏記得配置環境變量 NDK_ROOT
三、安裝CMake
去CMake官網下載CMake,並安裝。這裏選擇的版本是3.15.7。
安裝成功後,驗證安裝是否成功
四、修改配置,編譯出不同 平臺
我們可以修改mars 下 build_android.py
if __name__ == '__main__':
while True:
if len(sys.argv) >= 3:
archs = sys.argv[2:]
main(False, archs, tag=sys.argv[1])
break
else:
archs = set(['armeabi-v7a','arm64-v8a']) # 這裏可以增加各種,原來只有armeabi
num = raw_input('Enter menu:\n1. Clean && build mars.\n2. Build incrementally mars.\n3. Clean && build xlog.\n4. Exit\n')
if num == '1':
main(False, archs)
break
elif num == '2':
main(True, archs)
break
elif num == '3':
main(False, archs, '--target marsxlog')
break
elif num == '4':
break
else:
main(False, archs)
break
編譯
所有的編譯腳本都在mars/mars 目錄, 運行編譯腳本之前也必須cd到此目錄,在當前目錄下運行,默認是編譯 armeabi 的,如果需要其他 CPU 架構,把編譯腳本中的archs = set(['armeabi'])
稍作修改即可。
python build_android.py
執行命令後,會讓選擇:
Enter menu:
1. Clean && build mars.
2. Build incrementally mars.
3. Clean && build xlog.
4. Exit
如果是編譯Mars,選擇1或2,如果僅編譯XLog,選擇3。
在mars\libraries\mars_xlog_sdk\libs\armeabi-v7a
路徑下,就可以看到,我們編譯後的so文件了。