微信Mars 组件 GitHub - Tencent/mars: Mars is a cross-platform network component developed by WeChat.

标签: | 发表时间:2018-01-10 08:59 | 作者:
出处:https://github.com

Mars

license Release Version PRs Welcome WeChat Approved WeChat Approved

Mars 是微信官方的跨平台跨业务的终端基础组件。

mars

  • comm:可以独立使用的公共库,包括 socket、线程、消息队列、协程等;
  • xlog:高可靠性高性能的运行期日志组件;
  • SDT: 网络诊断组件;
  • STN: 信令分发网络模块,也是 Mars 最主要的部分。

Samples

sample 的使用请参考 这里

Getting started

接入 Android或者 iOS/OS X或者 Windows

Android

gradle 接入我们提供了两种接入方式: mars-wrapper或者 mars-core。如果你只是想做个 sample 推荐使用 mars-wrapper,可以快速开发;但是如果你想把 mars 用到你的 app 中的话,推荐使用 mars-core,可定制性更高。

mars-wrapper

在 app/build.gradle 中添加 mars-wrapper 的依赖:

dependencies {
    compile 'com.tencent.mars:mars-wrapper:1.1.8'
}

或者

mars-core

在 app/build.gradle 中添加 mars-core 的依赖:

dependencies {
    compile 'com.tencent.mars:mars-core:1.2.1'
}

或者

mars-xlog

如果只想使用 xlog,可以只加 xlog 的依赖(mars-core,mars-wrapper 中都已经包括 xlog):

dependencies {
    compile 'com.tencent.mars:mars-xlog:1.0.6'
}

接着往下操作之前,请先确保你已经添加了 mars-wrapper 或者 mars-core 或者 mars-xlog 的依赖

Xlog Init

在程序启动加载 Xlog 后紧接着初始化 Xlog。但要注意如果你的程序使用了多进程,不要把多个进程的日志输出到同一个文件中,保证每个进程独享一个日志文件。而且保存 log 的目录请使用单独的目录,不要存放任何其他文件防止被 xlog 自动清理功能误删。

System.loadLibrary("stlport_shared");System.loadLibrary("marsxlog");finalStringSDCARD=Environment.getExternalStorageDirectory().getAbsolutePath();finalStringlogPath=SDCARD+"/marssample/log";//this is necessary, or may cash for SIGBUSfinalStringcachePath=this.getFilesDir()+"/xlog"//init xlogif(BuildConfig.DEBUG) {Xlog.appenderOpen(Xlog.LEVEL_DEBUG,Xlog.AppednerModeAsync, cachePath, logPath,"MarsSample","");Xlog.setConsoleLogOpen(true);

}else{Xlog.appenderOpen(Xlog.LEVEL_INFO,Xlog.AppednerModeAsync, cachePath, logPath,"MarsSample","");Xlog.setConsoleLogOpen(false);
}Log.setLogImp(newXlog());

程序退出时关闭日志:

Log.appenderClose();

STN Init

如果你是把 mars-core 作为依赖加入到你的项目中的话,你需要显式的初始化和反初始化 STN

在使用 STN 之前进行初始化

//set callbackAppLogic.setCallBack(stub);StnLogic.setCallBack(stub);SdtLogic.setCallBack(stub);//Initialize the Mars PlatformCommMars.init(getApplicationContext(),newHandler(Looper.getMainLooper()));//Initialize the MarsStnLogic.setLonglinkSvrAddr(profile.longLinkHost(), profile.longLinkPorts());StnLogic.setShortlinkSvrAddr(profile.shortLinkPort());StnLogic.setClientVersion(profile.productID());Mars.onCreate(true);BaseEvent.onForeground(true);StnLogic.makesureLongLinkConnected();

初始化顺序不一定要严格遵守上述代码的顺序,但在初始化时首先要调用 setCallBack 接口 (callback 文件的编写可以参考 demo),再调用 Mars.init,最后再调用 onForeground 和 makesureLongLinkConnect,中间顺序可以随意更改。 注意:STN 默认是后台,所以初始化 STN 后需要主动调用一次 BaseEvent.onForeground(true)

需要释放 STN 或者退出程序时:

Mars.onDestroy();

Event Change

网络切换时:

BaseEvent.onNetworkChange()

如果你是把 mars-wrapper 作为依赖加入到你的项目中,你只需要显式的初始化 STN,不需要反初始化(因为 mars-wrapper 会进行反初始化)

MarsServiceProxy.init(this, getMainLooper(),null);

不管你是使用 mars-wrapper 还是 mars-core,你都需要特别注意以下事件:

前后台切换:

BaseEvent.onForeground(boolean);

应用的账号信息更改:

StnLogic.reset();

如果你想修改 Xlog 的加密算法或者长短连的加解包部分甚至更改组件的其他部分,可以参考 这里

iOS/OS X

编译

    python build_apple.py

把 mars.framework 作为依赖加入到你的项目中,把和 mars.framework 同目录的后缀名为 rewriteme 的文件名删掉".rewriteme"和头文件一起加入到你的项目中。

Xlog Init

在程序启动加载 Xlog 后紧接着初始化 Xlog。但要注意保存 log 的目录请使用单独的目录,不要存放任何其他文件防止被 xlog 自动清理功能误删。

NSString* logPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingString:@"/log"];//set do not backup for logpathconstchar* attrName ="com.apple.MobileBackup";u_int8_tattrValue =1;setxattr([logPath UTF8String], attrName, &attrValue,sizeof(attrValue), 0, 0);//init xlogger#ifDEBUGxlogger_SetLevel(kLevelDebug);appender_set_console_log(true);
#elsexlogger_SetLevel(kLevelInfo);appender_set_console_log(false);
#endifappender_open(kAppednerAsync, [logPath UTF8String],"Test","");

在函数 "applicationWillTerminate" 中反初始化 Xlog

appender_close();

STN Init

在你用 STN 之前初始化:

- (void)setCallBack {mars::stn::SetCallback(mars::stn::StnCallBack::Instance());mars::app::SetCallback(mars::app::AppCallBack::Instance());
}

- (void) createMars {mars::baseevent::OnCreate();
}

- (void)setClientVersion:(UInt32)clientVersion {mars::stn::SetClientVersion(clientVersion);
}

- (void)setShortLinkDebugIP:(NSString*)IP port:(constunsignedshort)port {
    std::stringipAddress([IPUTF8String]);mars::stn::SetShortlinkSvrAddr(port, ipAddress);
}

- (void)setShortLinkPort:(constunsignedshort)port {mars::stn::SetShortlinkSvrAddr(port);
}

- (void)setLongLinkAddress:(NSString*)string port:(constunsignedshort)port debugIP:(NSString*)IP {
    std::stringipAddress([stringUTF8String]);
    std::stringdebugIP([IPUTF8String]);
    std::vector<uint16_t> ports;
    ports.push_back(port);mars::stn::SetLonglinkSvrAddr(ipAddress,ports,debugIP);
}

- (void)setLongLinkAddress:(NSString*)string port:(constunsignedshort)port {
    std::stringipAddress([stringUTF8String]);
    std::vector<uint16_t> ports;
    ports.push_back(port);mars::stn::SetLonglinkSvrAddr(ipAddress,ports);
}

- (void)reportEvent_OnForeground:(BOOL)isForeground {mars::baseevent::OnForeground(isForground);
}

- (void)makesureLongLinkConnect {mars::stn::MakesureLonglinkConnected();
}

初始化顺序不一定要严格遵守上述代码的顺序,但在初始化时首先要调用 setCallBack 接口 (callback 文件的编写可以参考 demo),再调用 Mars.init,最后再调用 onForeground 和 makesureLongLinkConnect,中间顺序可以随意更改。 注意:STN 默认是后台,所以初始化 STN 后需要主动调用一次 BaseEvent.onForeground(true)

需要释放 STN 或者退出程序时:

- (void)destroyMars {mars::baseevent::OnDestroy();
}

Event Change

前后台切换时:

- (void)reportEvent_OnForeground:(BOOL)isForeground {mars::baseevent::OnForeground(isForeground);
}

网络切换时:

- (void)reportEvent_OnNetworkChange {mars::baseevent::OnNetworkChange();
}

Windows

安装Visual Studio 2015

编译

python build_for_win32.py

把 mars.lib作为依赖加入到你的项目中,把和 mars.lib 同目录的后缀名为 rewriteme 的文件名删掉".rewriteme"和头文件一起加入到你的项目中。

Xlog Init

在程序启动加载 Xlog 后紧接着初始化 Xlog。但要注意保存 log 的目录请使用单独的目录,不要存放任何其他文件防止被 xlog 自动清理功能误删。

std::string logPath ="";//use your log pathstd::string pubKey ="";//use you pubkey for log encrypt//init xlog#ifDEBUGxlogger_SetLevel(kLevelDebug);appender_set_console_log(true);
#elsexlogger_SetLevel(kLevelInfo);appender_set_console_log(false);
#endifappender_open(kAppednerAsync, logPath.c_str(), "Test", pubKey.c_str());

在程序退出前反初始化 Xlog

appender_close();

STN Init

在你用 STN 之前初始化:

voidsetShortLinkDebugIP(conststd::string& _ip,unsignedshort_port)
{mars::stn::SetShortlinkSvrAddr(_port, _ip);
}voidsetShortLinkPort(unsignedshort_port)
{mars::stn::SetShortlinkSvrAddr(_port,"");
}voidsetLongLinkAddress(conststd::string& _ip,unsignedshort_port,conststd::string& _debug_ip)
{
	vector<uint16_t> ports;
	ports.push_back(_port);mars::stn::SetLonglinkSvrAddr(_ip, ports, _debug_ip);
}voidInit()
{mars::stn::SetCallback(mars::stn::StnCallBack::Instance());mars::app::SetCallback(mars::app::AppCallBack::Instance());mars::baseevent::OnCreate();//todo//mars::stn::SetClientVersion(version);//setShortLinkDebugIP(...)//setLongLinkAddress(...)mars::baseevent::OnForeground(true);mars::stn::MakesureLonglinkConnected();
}

初始化顺序不一定要严格遵守上述代码的顺序,但在初始化时首先要调用 setCallBack 接口 (callback 文件的编写可以参考 demo),再调用 Mars.init,最后再调用 onForeground 和 makesureLongLinkConnect,中间顺序可以随意更改。 注意:STN 默认是后台,所以初始化 STN 后需要主动调用一次 BaseEvent.onForeground(true)

需要释放 STN 或者退出程序时:

mars::baseevent::OnDestroy();

Support

还有其他问题?

  1. 参看 mars/sample
  2. 阅读 源码
  3. 阅读 wiki或者 FAQ
  4. 联系我们。

Contributing

关于 Mars 分支管理、issue 以及 pr 规范,请阅读 Mars Contributing Guide

License

Mars 使用的 MIT 协议,详细请参考 LICENSE

相关 [微信 mars github] 推荐:

微信Mars 组件 GitHub - Tencent/mars: Mars is a cross-platform network component developed by WeChat.

- -
Mars 是微信官方的跨平台跨业务的终端基础组件. comm:可以独立使用的公共库,包括 socket、线程、消息队列、协程等;. xlog:高可靠性高性能的运行期日志组件;. STN: 信令分发网络模块,也是 Mars 最主要的部分. sample 的使用请参考. gradle 接入我们提供了两种接入方式:.

微信终端跨平台组件Mars正式开源!

- - 博客园_新闻
今天,2017 微信公开课 PRO 版在广州亚运城拉开了序幕. 微信作为一个工具,以最高效率、最短时间的方法来帮助用户完成任务,在现场,我们甚至于可以看到“扫一扫”的各种场景“想象力”. 而除了张小龙对于小程序的解读、小程序场景案例等之外,我们也格外关注微信在开源方面的卓然成果. 今天,微信终端跨平台组件 Mars 正式宣布开源.

英蓓特Mars board的android4.0.3源码编译过程

- - CSDN博客推荐文章
英蓓特Mars board的android4.0.3源码编译过程. 作者:StephenZhu(大桥++) 2013年8月22日. 虚拟机软件virtual box 4.2.16  2. 虚拟机装操作系统 ubuntu10.04 32bit版. 虚拟机内存1.792GB, 硬盘500GB(未必用上这么多,使用动态模式).

Home · JohnLangford/vowpal_wabbit Wiki · GitHub

- -
There are two ways to have a fast learning algorithm: (a) start with a slow algorithm and speed it up, or (b) build an intrinsically fast learning algorithm.

git和github简介(上)

- linyehui - 没做完,没准备好
在此贴上本人在Web标准化交流会6月25日北京站的主题分享. 在线PPT:http://jinjiang.github.com/slides/learning-git/. PPT源码:https://github.com/Jinjiang/slides/tree/gh-pages/learning-git.

Github使用指南(转)

- - CSDN博客推荐文章
来自:https://github.com/neuola/neuola-legacy/wiki/github%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97. 如果你只是想了解 github 的使用,请跳到 Github 简介一节. 作为程序员大军之一,想必大家有这样的经历吧.

github 上的好东西

- - 收集分享互联网资源
基于HTML5的专业级图像处理开源引擎.

Windows 下 使用TortoiseGit GitHub

- - CSDN博客研发管理推荐文章
TortoiseGit依赖msysgit,首先下载: http://code.google.com/p/msysgit/downloads/detail?name=msysGit-fullinstall-1.8.1.2-preview20130201.exe&can=2&q=. 再下载TortoiseGit: http://code.google.com/p/tortoisegit/wiki/Download?tm=2.

一个 GitHub Trending 小工具

- - IT瘾-dev
Github Trending基本上是我每天都会浏览的网页,上面会及时发布一些GIthub上比较有潜力的项目,或者说每日Star数增量排行榜. 不过由于Github Trending经常会实时更新,即使你访问得再勤,难免还是会错过一些你感兴趣的项目,为此不少人都想出了自己的解决办法,例如. josephyzhou,他的 github-trending项目得到了众多人的青睐,我仔细阅读了他的源码 (Go),发现实现也较为简单, 就用Python 重写了一下,发现代码少了好多,详见 我的 github-trending.

Github 用户数突破一百万

- pipitu - Solidot
51开源社区 写道 "Gibhub用户数已突破一百万,Github官方博客发布了庆祝图片. 目前已有1,004,771用户,在Github托管了超过2,836,210 个git库. Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理. 推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中.