-
Notifications
You must be signed in to change notification settings - Fork 3.6k
Mars 常见问题
Mars 只是一个客户端的解决方案,并不包括服务端的代码。 如果使用 Mars 中的 STN,需要客户端和服务端对应好协议把服务端实现了。
STN 不可以,也不建议,如果你执意这么做,请给getAppFilePath的回调返回不同的路径。 Xlog 可以,只需要你传参数的时候日志的前缀不要传相同的就行。
如果你已经深入了解了 Mars,感觉自己适合使用 Mars的,需要先理解长短连协议和加解包的区别。不论之前使用的哪种方式,长短连的协议是必须有的,你需要参照自定义扩展把长短连协议和服务器端对齐, 至于加解包逻辑是在 Req2Buf 和 Buf2Resp 回调中做的,给上实现就可以了。关于长短连协议的理解和 req2Buf buf2Resp 的理解可以看一个例子:就像你用 HTTP 发一个 json 数据 HTTP 就类似 Mars 的长短连协议, json 的组装和解析就是 req2Buf 和 buf2Resp 来做的
Mars 主要针对信令数据而设计的,如果一个数据需要接收时间比较长,会被认为超时,建议单个数据包不要超过 64 k
运行server前,如果你本机没有安装过gradle, 会自动安装。如果一直卡住,建议翻墙或者更换VPN试试。
一个任务以 startTask 为开始,以 onTaskEnd 为结束。 首先调用 startTask-> 如果你的任务设置了 limit_flow=true 或者 limit_frequency=true 会进行防雪崩检测 -> 如果设置了need_authed = true 会回调 makesureAuth 询问是否已经是登陆态,不是的话需要上层异步去登陆,底层任务会等待-> 回调 req2Buf 进行打包-> 如果send_only = false 就是需要等待回包, 不需要等待的话会直接调用 onTaskEnd -> 收到回包回调上层 buf2Resp 进行解包 -> onTaskEnd。关于长短连协议的理解和 req2Buf buf2Resp 的理解可以看一个例子:就像你用 HTTP 发一个 json 数据 HTTP 就类似 Mars 的长短连协议, json 的组装和解析就是 req2Buf 和 buf2Resp 来做的
Xlog 是可以独立使用的,SDT 暂时不可以单独使用。
如果没有修改相关逻辑,使用的默认实现的话,解压脚本在log/crypt/decode_mars_log_file.py
mmap2 文件为 Xlog 的缓存文件,不用关注,真正的日志内容在以 xlog 为后缀的文件中。
使用 Xlog 的时候请尽量不要使用同步模式,同步模式会直接写文件,同步模式主要为了调试环境用的。推荐的模式为异步模式,INFO级别。 #Android
先区分是否是 python 的语法错误,如果是,请先确保 python 版本为2.7x, 如果是编译过程中的错误,请确保使用的 ndk 版本为 ndk-r11c 以上。如若仍然不能解决,请联系我们。
目前 Mars 的项目组织方式在 Android 平台下调试并不友好,建议通过 xlog 输出的信息进行排查问题。
目前 xlog 不支持多个进程写到同一个文件中,先确认是否是因为多个进程把日志写到同一个文件所致。
如果出现下图: 请重试直到这个 tips 消失。如果一直重试不成功可以尝试把下面的代码先注释掉再 Try Again。成功后再取消掉:
调用 native 函数前一定要确保包含 native 函数的实现的 so 是在本进程中,如果不在,可能需要跨进程调用或者先 load so。
mars 是经过微信验证过的,稳定性方面是有保证的。不过你依然可以有自己的 crash 监控模块。 native crash 捕捉原理是基于 linux 的信号机制进行堆栈回溯。具体实现可以参考 Android 内核源码中 libunwind 和 libcorkscrew。不建议使用 dlopen 进行调用,因为安全问题谷歌会在不久的将来禁止 dlopen 系统库(个别库除外)。 第三方 crash 捕捉服务推荐使用 Bugly
考虑用户的电量和流量,长连的连接策略会根据应用的前后台而不同。 请先确认是否忘记在前后台切换时主动调用
BaseEvent.onForeground(boolean);
#iOS/OS X
我们一直认为合适的才是最好的。Mars 是有很多子项目,每个子项目是单独的编译配置,这点 CocoaPods 做不到,因为 CocoaPods 是一个项目文件,如果引入 CocoaPods 就必须多维护一套编译脚本,而且丢失了我们目前多个子项目的优势,所以并不适合我们的项目。
请确认是否已经在 xcode 中单独打开了该子项目,如果已经单独打开,请先关闭,再打开 Mars。
请确认直接调用 C/C++接口的 Objc 源文件是否都是 .mm 后缀,如果不是,请把 .m 后缀改为 .mm 。
为了保证使用的 Mars 代码是最新代码,每次编译 demo 都会通过 Run Script 编译 Mars。 如果已经编译过一次,可以把 Run Script 移除,防止重复编译。
使用编译脚本编译的 framework 是 release 版本的,即使中断言,也只会打一行日志,并不会导致程序退出,调试过程中生成的 Mars 的库是 debug 版本的,中断言会导致程序退出。 中断言一般因为某些 callback 没有设置,或者 callback 中的某个函数没有实现,请结合堆栈进行分析。
考虑用户的电量和流量,长连的连接策略会根据应用的前后台而不同。 请先确认是否忘记在前后台切换时主动调用
mars::baseevent::OnForeground(isForground);
更多的使用范例,大家请仔细阅读Sample。使用过程中有任何问题或建议,欢迎联系我们!
Mars Android 接入指南
Mars iOS/OS X 接入指南
Mars Windows 接入指南
Xlog 加密使用指引
Mars 常用术语
Mars 常见问题
Mars 自定义扩展
Mars Sample 使用说明
Mars Android 接口详细说明
Mars iOS/OS X 接口详细说明
Mars 其他资料
STN Benchmark
Xlog Benchmark
微信 Mars — 移动互联网下的高质量网络连接探索(小蛮腰科技大会PPT)
微信终端跨平台组件 Mars 系列(一) - 高性能日志模块 xlog
微信终端跨平台组件 Mars 系列 (二) - 信令传输超时设计