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文件了。