首页 » 软件优化 » IM客户端技术之路——客户端架构(方案平台开发交互代码)

IM客户端技术之路——客户端架构(方案平台开发交互代码)

南宫静远 2024-11-05 15:15:31 0

扫一扫用手机浏览

文章目录 [+]

IM,每个人的理解都不同,有些说不就是个即时通讯吗,很简单;也有人说IM对技术要求很高,很不容易。

这两种说法都没错,只是观察角度和要求不同。

持前一种说法的人,要么就是扫地僧水平的高手,要么就是一个新入行的新手,只是开发一个demo而已。
持后一种说法的人跟IM系统有个亲密接触,有一些这方面的经验。

IM客户端技术之路——客户端架构(方案平台开发交互代码) 软件优化
(图片来自网络侵删)

我曾经做过一个比喻,IM好比发动机;我国在导弹领域能够独立自主,但是在飞机方面一直受制于人;为什么?

因为要求不同,火箭发动机属于一次性产品,不可重复利用,只要把火箭送上天使命就完成了;飞机则不同,飞机对发动机的要求比火箭高很多。

同样的道理,你研发一款低频使用系统和高频使用的系统对技术的要求也不一样。

生产任何一个东西,要求越高,自然研发门槛就越高,IM自然也不例外。

好的IM客户端要达到好的用户体验,响应速度和流畅度;所以在架构选择上要格外慎重,如果架构选择不正确,后期的优化和用户体验即使花很大精力也很难达到预期效果。

架构方案

目前App的开发主要有如下四个方案:

H5 方案纯原生方案跨平台SDK+原生UI交互跨平台SDK+跨平台UI交互

以上4个方案各有千秋,下面逐一进行分析;

方案一:H5 方案

该方案一般采用websocket长连接或者http短链接与IM服务端交互(具体交互细节此处不再赘述)。

此方案优点是开发速度快,跨平台性好,一套代码各个平台都可以使用,升级方便;

缺点也很明显:依赖js引擎和浏览器渲染,H5+js做端链接低频应用勉强可以;对于IM这种高频大数据量的应用,加上js对于存储和本地资源访问的限制,后期对卡顿,加载慢,动画效果差等缺点没有好的方案来优化解决,大多数团队都会转到后面的3个方案上。

方案二:纯原生方案

每个App端独立开发,实现各自的通讯,协议栈,数据存储,业务逻辑和UI交互;

此方案利用每个操作系统的特性,在用户体验上很容易达到用户期望,也是使用较广的一个方案;缺点是ios,android,windows,MacOS,Linux每个操作系统都一个团队来开发,所有业务逻辑和数据处理针对每个平台都需要实现一遍,浪费开发测试资源,从成本上来算不经济。

采用此方案没有技术障碍,如果选择的开发框架提供的组件库不能满足要求,还可以通过访问操作系统底层API来解决问题。

方案三:跨平台SDK+原生UI交互

SDK负责实现通讯,协议栈,数据存储,业务逻辑;每个平台单独实现部分高频UI交互,比如登录,会话列表,单聊会话,群聊会话,会话设置等。

SDK一般用c/c++实现,跨平台性好,效率高,每个操作系统对c/c++的支持都很好,底层直接调用std标准库和操作系统API实现相应的功能需求;通过在各个平台进行交叉编译,实现一次代码,到处编译的状况。

此方案用户体验没问题,解决了方案二的人员浪费问题,底层通讯,协议栈,数据存储,业务逻辑在DK中实现,不用每个平台自己实现,节省不少人力资源,

方案四:跨平台SDK+跨平台UI交互;

此方案是对上一个方案三的局部优化;SDK实现了底层通讯,数据,逻辑的统一化后;

有些同学说了,既然底层通讯数据处理,业务逻辑可以做成跨平台SDK,那UI能不能也做成跨平台的,当然能了。

主要有如下跨平台UI可以选择:

Flutter:

Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。
开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。
Flutter提供了丰富的组件、接口,开发者可以很快地为 Flutter添加 native扩展。
同时 Flutter还使用 Native引擎渲染视图,这无疑能为用户提供良好的体验。

Flutter属于新技术,在IM领域目前没有成熟先例,需要预研如下问题:

A.系统原生API的兼容性与支持,一些原生化问题要能解决,比如每个平台UI交互流畅和动画的支持,桌面图标角标,push提醒等

B.高频,大量数据刷新的性能;

C.长时间运行内存和性能是否能达到指标;

Qt:

Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。
它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。
Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正的组件编程。

针对windows,Mac 平台个人比较推荐使用Qt开发UI,技术成熟,性能好,既能满足Windows,Mac,也能够将来兼容UOS(Linux);一套代码三个平台,爽否?

通过以上分析,方案三和方案四无疑是较好的选择;从投入产出比来看,如果方案四中Flutter能解决ABC问题属于最佳方案;具体情况各位同学可以根据自己团队实际情况来选择。

最后奉上我司的客户端架构图可供参考;

本人在IM领域研发十余年,逐步将这数十年来的积累整理出来,以供后来者借鉴,探讨。

谢谢关注~~

相关文章

游戏盘锁语言的魅力与挑战

随着科技的发展,游戏产业在我国日益繁荣,游戏盘锁语言作为游戏开发的重要组成部分,也备受关注。游戏盘锁语言是一种专门用于游戏开发的编...

软件优化 2025-01-01 阅读0 评论0

锤子手机,匠心独运,引领科技潮流

随着科技的飞速发展,手机已经成为了人们日常生活中不可或缺的伙伴。在众多手机品牌中,锤子手机凭借其独特的匠心精神和创新理念,成为了备...

软件优化 2025-01-01 阅读0 评论0

智能手机语言革命,跨文化交流的新桥梁

随着科技的飞速发展,智能手机已成为人们日常生活中不可或缺的工具。其中,智能手机的语言功能更是成为跨文化交流的重要桥梁。本文将从智能...

软件优化 2025-01-01 阅读0 评论0

短信语言通知,便捷沟通的桥梁

随着科技的发展,短信已经成为了我们生活中不可或缺的沟通工具。尤其在疫情防控、紧急通知等场合,短信语言通知更是发挥着至关重要的作用。...

软件优化 2025-01-01 阅读0 评论0

林世霖C语言,探索编程之美,介绍技术未来

在计算机科学领域,C语言作为一种历史悠久、应用广泛的编程语言,始终占据着举足轻重的地位。而我国著名C语言专家林世霖,更是以其深厚的...

软件优化 2025-01-01 阅读0 评论0