阿里技术分享:闲鱼IM基于Flutter的移动端跨端改造实践

频道:闲鱼技术 日期: 浏览:817
  本文由阿里闲鱼技术团队祈晴分享,本文无法全文发布在公众号,52im社区全文:http://www。52im。网/线程-3615-1-1。html,或点击“阅读原文”!

微信号:ccjun91
添加微信群,试用软件
复制微信号

  一、内容概述

  本文总结了阿里闲鱼技术团队使用Flutter在对闲鱼IM进行移动端跨端改造过程中的技术实践等,文中对比了传统Native与现在大热的Flutter跨端方案在一些主要技术实现上的差异,以及针对 Flutter 技术特点的具体技术实现,值得同样准备使用 Flutter 开发IM 的技术模拟和参考。

  二、闲鱼即时通讯

  闲鱼IM的移动端框架构筑于2016至2017年间,期间经历了多次升级导致历史包累积多,又经历了IM界面的Flutter化,从而形成了客户端架构更复杂。

  从开发调查总结闲鱼IM移动端当前主要存在以下几个问题:

  1)研究结果较低:当前架构涉及到Android/iOS双端的逻辑代码以及Flutter的代码,定位问题往往只能从Flutter UI表相倒查到Native逻辑层;

  2)架构层次架构:架构设计上层次不清晰,业务逻辑在核心层层层夹杂代码风险大;

  3)性能测试略差:核心数据源存储本地内存,经Flutter插件将数据源序列化上抛Flutter侧,在大需要数据源情况下表现表现。

  从产品调查总结闲鱼IM移动端当前系统的主要问题如下:

  1)定位问题故障:线上舆情反馈千奇百怪,测试总是无法恢复现相关场景,因此很多时候可能会呼吸嗅觉;

  2)疑难杂杂症:组织的不稳定性出现的问题出现,当前红红疑难杂症主要包括未读点计数、iPhone5C端机以及多媒体发送等低等问题;

  3)问题差异性大:Android和iOS端逻辑代码差异大,包括埋点逻辑都不尽相同,排查问题来源时双端都有不同的原因,解决方案也不相同。

  三、业界的移动端跨端方案

  为解决当前IM的技术痛点,闲鱼最近开始关于IM架构升级项目,重在解决客户端中Andriod和iOS双端方案的痛点,演示就是实现跨端统一的Android/iOS逻辑架构。

  在当前行业内跨端方案可迎来归类如下图谱:

  在GUI语言的跨端方案有Weex、ReactNative、H5、UniAPP等,其内存模型大多需要通过桥接调用Native模式存储。

  在逻辑语言的跨端方案,孩子有C/C++等与虚拟机语言跨端,当然有语言也能实现。

  另外有两个独立于上述体系之外的架构就是Flutter和KMM(谷歌基于Kotlin实现类似Flutter架构),其中Flutter运行特定的DartVM,将内存数据挂载其自身的隔离中。

  考虑闲鱼是Flutter的前沿探索者,方案上优先使用Flutter。

然而Flutter的isolate更像一个流程的概念(你实现了非使用流程模式),变成了Android,在后台场景中,Android的Dalvik虚拟机多个线程运行共享一个内存堆而DartVM的Isolate运行隔离独立的堆,区别通讯方式比较繁简(需经过序列化反序列化过程)。

  整个模型如下图所示:

  若按官方混合的框架实现Flutter应用,开启多个FlutterAcitivty/FlutterController,发热会生成多个引擎,对应会存在多个隔离,而隔离的通讯即时通讯(类似socket或AIDL),这里示例闲鱼FlutterBoost的设计理念,FlutterIM 架构将多个页面的引擎共享,则内存模型就天然支持共享读取。

  原理图如下:

  四、全文阅读

  非常抱歉,本文无法全文发布在公众号,浏览全文,请前往即时通讯网(52im。net)社区:http://www。52im。网/线程-3615-1-1。html,或点击“阅读原文”!以上,多谢理解!

复制成功

微信号: ccjun91
添加微信群,试用软件

我知道了
添加微信

微信号: ccjun91
添加微信群,试用软件

一键复制加过了
18749471747
微信号:ccjun91添加微信
ccjun91