Mars 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Mars 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Mars 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Mars 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Mars 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 MIT
开发语言 C/C++ 查看源码 »
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发常用工具包
开源组织 腾讯
地区 国产
投 递 者 红薯
适用人群 未知
收录时间 2016-12-28

软件简介

Mars 是微信官方的终端基础组件,是一个使用 C++ 编写的业务性无关、平台性无关的基础组件。目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。

主要包括以下几个部分:

  • COMM:基础库,包括socket、线程、消息队列、协程等基础工具;

  • XLOG:通用日志模块,充分考虑移动终端的特点,提供高性能、高可用、安全性、容错性的日志功能;

  • SDT:网络诊断模块;

  • STN:信令传输网络模块(核心模块),负责终端与服务器的小数据信令通道。包含了微信终端在移动网络上的大量优化经验与成果,经历了微信海量用户的考验。

Mars 最早起源于微信的实际发展需要。由于微信多平台、亿级用户,微信基础功能的修改影响重大。但不同平台不同的实现导致众多平台上很难统一,一方面不利于质量把关,可能存在重大隐患,一方面也不利于微信对基础研究的深入。

因此,微信开始了跨平台基础组件的开发,并且在微信中沉淀多年。随着基础组件的发展与稳定,他们希望通过开源的力量进一步的提升微信的基础,并且也期待行业的互相交流与促进,因此启动了Mars项目。

微信的网络层设计到很多不同的业务,在微信中使用到的绝大部分功能,都是基于Mars提供的网络组件,包括文本消息、语音消息、朋友圈等核心功能。只有少部分业务不在范围内,例如VOIP、Webview等。微信中使用到的网络服务,大体分为两种类型:信令网络、数据网络。其中STN负责信令网络,CDN组件则负责数据网络。但由于CDN涉及到腾讯内部的CDN服务,因此在Mars的开源列表中并没有包含CDN部分。

SDT网络诊断模块提供了最基础的检测能力,需要由使用者自己组合使用。各个平台的Reachability API能反映的情况有局限,无法应对复杂的网络诊断,事实上有一些开源项目就是为了替换系统API。微信由于自身特点对网络诊断要求很高,因此将它作为基础的跨平台组件进行开发维护。

STN是微信的信令传输网络,也可以认为是小数据传输网络,是微信日常中使用最频繁的网络通道。在开源设计上,STN抽象了微信的使用模型,使得STN成为业务无关的网络通道,并且应用到了包括微信在内的多个腾讯内部应用中。

AFNetworkingRetrofitOkhttp等框架不同,STN不仅是跨平台的网络解决框架,更是着重了“移动互联网“这一特点,结合移动互联网的不稳定特性,做了大量的优化工作,并且这些优化都是经过了微信长时间的验证和使用的。除此之外,STN中还包含了很多其他方面的实用设计,包括自定义DNS、容灾设计、负载考量、APP的前后台考量、休眠机制考量、省电机制等等。

STN 比其它网络框架提供更多的功能:

  1. 数据监控:STN提供了许多数据回调接口,使得应用可以基于这些网络数据,建立统计分析、监控等工具来管理应用的实际网络情况;

  2. 问题定位:STN中含有很多关键日志,并且日志的设计已经帮助微信定位了很多的网络层问题。结合Mars提供的XLOG日志机制,应用可以运行时也打开日志,非常方便定位;

  3. 参数配置:STN中将很多参数抽离为配置,使得应用可以根据自己的情况进行修改。

网络通道上,目前STN提供了长连、短连两种类型的通道,用于满足不同的需求。使用STN后,应用开发者只需关注业务开发。移动互联网的各种“坑”则可以交由STN帮你处理。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (10)

加载中
日志模块做的不够好,不能通用化,而且不能用于多实例。 多业务场景, 我们利用微信日志模块原理做了支持多实例,多业务场景的组件,能够用于海量数据上报。以及log的上报,兼容了上报策略功能。 https://github.com/luojilab/DataTransHub
2020/09/08 14:09
回复
举报
打分: 推荐
其实只是开放出日志和网络模块,我最感兴趣的是“存储”模块。移动端所有的数据库都有“容量限制”,微信能把容量做到10G甚至更大采用的存储技术非常值得研究。
2017/01/05 14:30
回复
举报
okhttp 咋就不跨平台了????
2017/01/04 14:41
回复
举报
打分: 力荐
C和C++本来就是主流操作系统的native语言,要做跨平台要么研发用宏来做平台api适配,要么使用C的标准函数库来实现。 类似的还有openGL es,Android和iOS也是都支持的。不管怎样,再往上走都需要本平台的语言来完成开发。
2017/01/04 09:18
回复
举报
打分: 力荐
支持国内厂商开源软件
2017/01/03 14:25
回复
举报
跨平台一项,看得很无语……C++都跨平台了,java不能跨……移动时代真是变的好快~
2017/01/03 09:48
回复
举报
打分: 力荐
终于看到乌云背后射出来光线……雨过天晴见彩虹夏天太阳定晒人!
2017/01/03 03:48
回复
举报
打分: 力荐
微信用的是PB数据啊
2016/12/28 21:50
回复
举报
地板
2016/12/28 17:57
回复
举报
我在构思如何写下第一篇关于Mars的评论,还是……沙发?
2016/12/28 17:20
回复
举报
更多评论
2019/04/02 06:49

Mars 1.3.0 发布,微信官方跨平台跨业务终端基础组件

Mars 1.3.0 发布了,Mars 是微信官方的跨平台跨业务的终端基础组件,目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。 新版更新如下: ndk 升级为 ndk-r16b 编译 构建方案改为 cmake stl 库从 stlport_shared 改为 c++_shared 发布公告 下载地址: Source code(zip) Source code(tar.gz)...

1
12
发表于大前端专区
2019/01/01 07:43

Mars 1.2.2 发布,微信官方跨平台跨业务终端基础组件

Mars 1.2.2 发布了,Mars 是微信官方的跨平台跨业务的终端基础组件。 更新如下: 这是最后一个使用 stlport_shared stl 的版本,后续会使用 c++_shared, 并引入 C++11 这是最后一个使用 Android.mk 构建的版本,后续会改造成 cmake 本版本必须使用 ndk-r11c 编译 发布公告 下载地址: Source code(zip) Source code(tar.gz)...

0
5
发表了资讯
2017/10/13 07:50

Mars 1.2.1 发布,微信跨平台跨业务的终端基础组件

Mars 1.2.1 更新内容: 修复 xlog 中存在野指针的 bug 3b06da5 修复 iOS 11 编译失败的问题 f685e74 Mars 是微信官方的跨平台跨业务的终端基础组件,目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。 comm:可以独立使用的公共库,包括 socket、线程、消息队列、协程等; xlog:高可靠性高性能的运行期日志组件; SDT: 网络诊断组件; STN: 信令分发网络模块,也是 Mars 最主要的部分。 下载地址: Source code (z...

0
22
发表了资讯
2017/08/04 07:44

Mars 1.2.0 发布,微信跨平台跨业务的终端基础组件

Mars 1.2.0更新内容: 增加 Windows 支持 xlog 提供默认的加密算法:ecdh+tea Mars 是微信官方的跨平台跨业务的终端基础组件,目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。 comm:可以独立使用的公共库,包括 socket、线程、消息队列、协程等; xlog:高可靠性高性能的运行期日志组件; SDT: 网络诊断组件; STN: 信令分发网络模块,也是 Mars 最主要的部分。...

2
14
发表了资讯
2017/07/07 07:57

Mars 1.1.7 发布,微信跨平台跨业务的终端基础组件

Mars 是微信官方的跨平台跨业务的终端基础组件,目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。 comm:可以独立使用的公共库,包括 socket、线程、消息队列、协程等; xlog:高可靠性高性能的运行期日志组件; SDT: 网络诊断组件; STN: 信令分发网络模块,也是 Mars 最主要的部分。 Mars 1.1.7 更新: 修复 arm64_v8a 编不过的问题...

4
24
发表了资讯
2016/12/28 21:27

微信公布终端开源计划,开启腾讯正式开源之路

在12月28日举办的 2017 微信公开课 Pro 大会上,微信团队公布了微信终端开源组件计划。通过技术开源,将技术开发思想、经验、工具、代码组件开放给外部开发者。微信团队表示,工程师之间最好的交流方式就是代码,我们试着给自己提了一个小目标——让天下没有难写的APP。 据悉,微信开源策略首先建立在微信的实际业务基础之上,将开源过程中的组件和微信实际的产品迭代结合在一起,通过微信版本的不断更新,完善开源项目的迭代,...

15
46
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2020/05/08 11:55

【wechat login】

https://lucent.blog/passages/vue%E5%AE%9E%E7%8E%B0%E5%86%85%E5%B5%8C%E4%BA%8C%E7%BB%B4%E7%A0%81%E5%BE%AE%E4%BF%A1%E7%99%BB%E5%BD%95/ https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了问答
2017/04/18 21:56

【开源访谈】微信高级工程师闫国跃:Mars 的开源之路和我眼中的开源

Mars 是微信官方的跨平台跨业务的终端基础组件。目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。当初为什么选择开源 Mars?对于开源有什么心得?微信目前有开源其他项目的计划吗?本期开源访谈邀请到了微信高级工程师闫国跃老师,和大家谈谈 Mars 的开源之路,以及老师是如何看待开源的。 【本期嘉宾】 闫国跃,微信高级工程师,目前主要负责 Mars 开源工作。先后参与了微信终端基础组件的开发、微信终端日志系统的建...

4
31
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
10 评论
289 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部