前言

对于新派单通知、订单时效变更通知等需要及时反馈给用户的消息,目前点我达骑手的解决方案是定时轮询并通过http请求的方式主动从服务器获取变更,这种方式存在一定的缺陷,如http方式轮询流量消耗较高、消息通知不及时等。随着订单量和活跃用户量的急剧增加,这种轮询方式的弊端也逐渐显现出来,需要一种能够及时发送消息且流量消耗较低、弱网环境表现优异的方案替代现有轮询方案,那就是Socket长连接的方式。

Android客户端实现Socket长连接的框架有大名鼎鼎的Netty和Mina,也有微信团队开源的跨平台基础网络框架Mars,也就是本文要介绍的网络框架。

Mars是什么?

Mars是==微信官方==推出的C++编写的跨平台、跨业务的终端基础组件,可以直接在Android、iOS、Mac等平台使用。框架包含Common、STN、SDT、XLog等模块,下图为Mars官方提供的架构图:

各模块的主要功能如下:

1.Common:Mars框架最底层部分,为STN、XLOG、SDT模块提供组件支持,主要包括socket、线程、消息队列、协程等基础工具。

2.STN:信令分发网络模块,也是 Mars 最主要的部分,可以认为是Mars框架中的网络框架组件,是跨平台的 socket 层解决方案,主要负责终端与服务器的小数据信令通道。包含了微信终端在移动网络上的大量优化经验与成果,经历了微信海量用户的考验。

3.SDT:网络诊断模块,可以通过ping、dns、tcp等方式检测网络状况,并能够进行流量的统计。

4.XLOG:高性能运行期日志组件,可以通过穿越门获取更多关于Xlog的信息。

框架介绍向来都是高端大气的,在使用过程中是否真的能够做到高可用,高性能,负载均衡?Mars的五年的发展史和微信官方使用意味着这会是不错的移动APP Socket解决方案,在github上开源后已经有近万的star和近两千的fork,微信团队也曾公开表示会持续对Mars维护。

Mars怎么用?

Mars于2016年12月28日被微信团队开源,github地址是https://github.com/Tencent/mars ,所以可以根据需求对源码进行改造来满足项目使用要求。
以github提供的demo为例,简要阐述下环境搭建的步骤。

1.下载源码

从Mars代码仓库中pull出代码后,代码的组织结构是这样的:

其中mars部分为框架的C++源码部分,Mars中的SDT、STN、XLOG等模块的源码都在这里,如有必要,可以对源码进行改造。

samples为在Mac、Android、iOS等平台集成的demo工程,Server为简易搭建的服务器端代码工程,我们将使用Server+android两个工程构建简易的demo环境并进行Socket通讯。

2.Server环境搭建

将目录切换到/mars-master/samples/Server后会有一个start-server.py python脚本,使用python start_server.py执行该脚本并选择对应的编译平台,编译完成后,在mac电脑上出现如下两个弹窗:




至此,Server端的工程已经运行完毕,在Client端只需要将连接的服务器地址配置成自己server的IP即可。

3.Client环境搭建(以Android为例)

android工程的sample代码在/mars-master/samples/android目录下,将该目录的代码导入到AndroidStudio后,全局搜索marsopen.cn字符串替换成步骤2中运行的Server的IP地址后即可运行。以mac操作系统为例,在终端输入ifconfig即可查看到当前电脑的IP地址,截图如下:

运行成功后,Sample的界面是这样子的:


需要注意的是,页面中的STN Discuss、Xlog Discuss、SDT Discuss并非是针对STN、Xlog、SDT这三个模块的功能定制,这些文案都是从server中获取后填充到RecyclerView中去的,只是为了区分会话的唯一性,在同一个服务器IP地址的同一个模块下才能进行IM通讯。

4.简易版IM软件

其实Mars Sample就是一个简单的IM软件,点击页面的STN Discuss、Xlog Discuss、SDT Discuss中的任意一个即可进入聊天页面。聊天页面打开后,首先会弹窗创建一个昵称(不创建也是可以的),点击确定后开始跟在同一个Server的其他用户聊天。

网络框架对比

Mars是一款基于TCP协议的Socket网络框架,Mars与Android/iOS平台中常用的网络框架的对比清下如下:

Mars目前是不支持完整的Http请求方式的,不过微信官方已表示将集成Http请求方式作为Mars后续开源的重要完善部分。因为Mars是微信团队使用的基础网络框架,对于“移动互联网”中网络状态不稳定等特点做了大量的优化工作,并且这些优化经过微信超大用户量的长期验证和使用的。

Mars生态

由于开源时间(2016年底)较晚等原因,Mars生态不够完善,通过搜索引擎搜索到的关于Mars框架的内容也相对较少。但为了表示微信官方对这一跨平台、跨业务的socket解决方案的重视,github仓库中的wiki含有大量微信官方撰写的Blog,不仅包含各平台集成开发文档,还包含一些Mars框架在微信团队在5年的迭代过程中的演进和优化,如Mars智能心跳方案的深入介绍、应对弱网络状况的解决方案、信令传输超时方案优化等。这些Blog对于Mars扫盲和框架集成是没有太大的问题,但独木难成林,未来的Mars生态必然依赖越来越多的框架使用者在使用过程中的经验累计和推广,相信在微信官方的重视和广大使用者的共同努力下,Mars必定会成为跨平台Socket解决方案的不二选择!

跨平台基础网络框架Mars初探相关推荐

  1. 跨平台微信网络开源Mars与网络框架Okhttp、Volley、Retrofit,Cookie持久化

    > 1. Mars 移动端IM网络层跨平台组件库Mars- https://github.com/Tencent/mars Android.iOS.OS X 平台的 demo(微信开源Mars的 ...

  2. 使用Unity网络框架快速开发多人联网游戏(1)

    Net网络框架基于Socket网络库扩展而成的一款强大的多人在线网络游戏插件(框架),那么下面我就带领大家来学习一个这款网络插件(框架)的开发过程. 首先,你的安装unity,  只要unity支持. ...

  3. python 网络框架twisted基础学习及详细讲解

    twisted网络框架的三个基础模块:Protocol, ProtocolFactory, Transport.这三个模块是构成twisted服务器端与客户端程序的基本. Protocol:Proto ...

  4. wpf 开源框架_.NET Core跨平台基础框架:10 篇热文汇总

    (给DotNet加星标,提升.Net技能) 本文精选了DotNet 2019年12月份的10篇热门文章.其中有技术分享.技术资源. 注:以下文章,点击标题即可阅读 <C#异步编程 > Ta ...

  5. xms跨平台基础框架 - 基于.netcore

    背景 鄙人经过多年开发,数百个项目"打磨(折磨)",各种国内外框架平台都有涉及,没有一款称心顺手的,原因有三,一是设计反人类,二是不开源根本无法突破框架限制,三是即使开源也是阉割版 ...

  6. 【UEFI基础】UEFI网络框架之概述

    概述 UEFI中的网络框架大致如下: 其中最底下部分并不在UEFI代码中,它实际上代表的是网卡的驱动.它提供的接口可以与SNP对接. 而SNP是UEFI下操作网络的基本接口. 另外关于安全启动部分,在 ...

  7. 零基础学--Python网络框架Django1:jango的基本搭建和配置

    Django简介:Django 是一个高级的 Python 网络框架,可以快速开发安全和可维护的网站. 由经验丰富的开发者构建,Django负责处理网站开发中麻烦的部分,因此你可以专注于编写应用程序, ...

  8. 【 C++ 技术】 C++ 高性能服务器网络框架设计细节

    作者:范蠡  原文:C++ 高性能服务器网络框架设计细节 前言 这篇文章我们将介绍服务器的开发,并从多个方面探究如何开发一款高性能高并发的服务器程序.需要注意的是一般大型服务器,其复杂程度在于其业务, ...

  9. 【数据分发服务DDS】软件定义汽车【三】-SOA 基础软件框架与参考实现

    引言 上一篇文章对智能汽车软件的范围.软硬件升级.SOA的内涵进行了介绍,本篇将围绕 SOA的实现细节,重点阐述以下问题: SOA 基础软件框架 SOA 参考实现 SOA 实现所需相关技术 一.SOA ...

最新文章

  1. Adt 配置注释模板
  2. redisson的锁的类型_绝对干货:利用redisson完成分布式锁功能
  3. 编程中经常碰到且觉得难的事是什么?
  4. PIL图像处理开发极简教程
  5. JavaFX FXML场景编辑器使用示例
  6. Mybatis Integer类型参数值为0时判断为空、空字符串不通过
  7. IOS+Android马甲包封装上架!
  8. 投票选举 算法_区块链主流共识算法一文全通
  9. python pandas csv时间聚合_pandas中简单统计分组聚合函数的介绍
  10. “哎哟,真的很快哦” 闪送宣布签约周杰伦为其品牌代言人
  11. Madagascar的自定义浮点型函数--三角函数和反三角函数
  12. python账户密码_python02 用户名密码
  13. gmail登陆提示密码不正确
  14. 空间四点定位原理及应用
  15. vrp java_HCIA-VRP基础及操作
  16. MA Chapter 3 Presenting information(SRCharlotte)
  17. 用shader做一个柿子颜色的过场动画
  18. IPAD USB 充电程序
  19. 权值初始化 - Xavier和MSRA方法
  20. asp.net ajax1.0基础回顾(三):UpdatePanel的基本用法

热门文章

  1. 动量因子(Momentum factor)——投资组合分析(EAP.portfolio_analysis)
  2. hp 笔记本 linux 系统 bios 功能不能用,Ubuntu 17.10 Respin ISO发布下载,解决某些笔记本电脑BIOS问题...
  3. html5 style设置字体,初识HTML(5)+CSS(3)-2020升级版 - font-style:设置字体样式,3种
  4. 标准化降水指数spi java_标准化降水指数SPI(转)
  5. 阿里云客服号码通话无声音
  6. Python零基础爬取网页数据并导出Excel
  7. 东南大学计算机网络实验报告三,东南大学计算机网络第三次实验报告.docx
  8. Springboot实现的心理测评管理系统
  9. NCBI(pubmed)里医学主题词(MeSH)完整词库获取
  10. 云计算应用(二):云计算“虚拟化“概述