首页 > 其他分享 >关于大型客户端项目的思考

关于大型客户端项目的思考

时间:2023-06-07 11:01:59浏览次数:34  
标签:播放器 Shell 启动 思考 使用 进程 客户端 大型 SDK

大型客户端项目在使用过程中一般会面临几个问题:

a. 启动慢
b. 运行慢
c. 稳定性低
基于以上问题进行一些思考,最终总结出该方案.

解决方案

当项目过大时,需要加载的程序集也越多,对应程序需要启动的时间也越长,如果在这个时候有一个启动的过渡页,从使用的角度看,能在启动后快速看到程序反应,则在某种程度上加快了程序的启动速度.

以VS2022为例,在启动的时候并不是第一时间去加载整个IDE窗口,而是使用了一个过渡,先启动一个启动页再过渡到导航窗口,来选择要编辑的项目,再而去加载整个编辑界面.即:
启动窗口->导航窗口->编辑窗口
启动窗口时,可以看到VS主进程并没有真正启动,而是到导航窗口时才启动,这个时候也只是启动了7个子进程,直到编辑窗口时,以我的设置为例子进程数运行到13个,打到真正使用的状态.
那么退回来讲,如果在启动时,直接把这13个子进程的事情合并到一个主进程来做,可想而知,启动速度会慢多少倍
而这个情况正是我们在开发客户端项目时使用的逻辑.所以以此为鉴,要做的就是拆分主进程.


从稳定性来说,不管是VS还是CEFSharp,也都是采用多进程的方法,我在使用VS2022的时候遇到过某个模块功能崩溃但不影响主功能使用的情况,而CEFSharp中的CefSharp.BrowserSubprocess进程更是为每个页启动一个进程来做渲染等工作,好处则是即使其中一个页面崩溃,也不影响其他页面.我在开发过程中集成过好多第三方SDK,不限于腾讯阿里,但都在使用过程中遇到各种问题导致SDK内部崩溃,使整个程序崩溃的情况,这些也并不能通过良好的代码及经验来规避,只能等待SDK方去解决,但最终不管是体现在领导或用户方,都是开发人员来背锅,那么要怎么甩锅,我认为依然是多进程.


那说了这么多,多进程真的那么好么?
好是真的好,但也要从实际业务去考虑,比较缺点也很多

优点:

主进程启动快,安全性高,稳定性高,且可以更好的利用CPU

缺点:

启动进程成本高,进程间通讯成本高

所以并不能一味的去靠多进程,如果存在大的模块或者第三方服务时,才应该去考虑多进程实现.

多进程架构实现

说了这么说,那么以一个调用阿里播放器SDK的程序为例来进行一个实现.

Shell进程:
  1. 展示欢迎页
  2. 检测版本更新
    当存在版本更新时,直接对主程序集进行更新[主进程也可增加反更新Shell逻辑],增加用户体验(传统做法为,主进程启动时进行版本检测,如需要更新时再启动更新进程)
  3. 单例启动控制
    传统的单例启动是控制主进程,一次主进程存在,二次主进程则把启动参数抛给一次主进程.
    而先启动Shell进程,要做的就是判断主进程是否存在,如果存在直接把启动参数抛给主进程并关闭自己
Main进程:

程序的主要功能进程,被Shell进行调起,可接收Shell抛来的启动参数
集成播放器控件(该控件和播放器SDK完全解耦,负责渲染SDK回调的视频数据和发送控制命令)

Player进程:

实例播放器SDK,并把SDK中的视频数据回调给播放器控件


技术实现

关于进程间通讯,这里主要使用两种通讯方式,管道和共享内存(C#中SharedMemoryManager库)
a. ShellMain进程的通讯,可使用管道来实现.
b. Main(具体为播放器控件)和Player则使用管道和共享内存两种方式
播放器的控制逻辑使用管道来实现,而视频帧的数据回调则使用共享内存来实现.

其他

该方案为在使用其他软件时的观察和思考,包括一些利用ChatGPT4.0得到的信息,仅为个人理解.
软件及库不限于:VS2022,CEFSharp,网易云音乐,微信等.

标签:播放器,Shell,启动,思考,使用,进程,客户端,大型,SDK
From: https://www.cnblogs.com/mcc7/p/17462550.html

相关文章

  • EasyNTS上云网关现已支持Linux ARM架构客户端
    EasyNTS上云网关管理平台可集中管理所有接入的EasyNTS上云网关设备,实现接入与管控、动态组网、远程运维、文件传输、远程指令调用等功能,从终端到云端,形成了一整套的上云网关解决方案,极大地解决了现场无固定IP、端口不开放、系统权限不开放等问题。在之前的EasyNTS版本中,后台管理页......
  • Linux系统下如何保持进程在SSH客户端断开后仍继续运行?
    使用场景在Linux系统中,在执行一些运行时间比较长的任务时,必须等待执行完毕才能断开SSH连接或关闭客户端软件,否则可能会导致执行中断。本文介绍两种保障程序在您退出登录后持续运行的方法。方法1:使用nohup命令1.命令格式nohup,可以使运行的命令忽略SIGHUP信号。因此,即使退出登录......
  • SpringBoot 大型线上商城项目实战总结
    SpringBoot大型线上商城项目实战总结知识点和可以借鉴到自己项目的点:分页逻辑的处理操作​ 这里没有使用封装好的分页处理的相关工具类,而是自己去写分页封装的逻辑代码,帮助我们去了解分页操作的底层逻辑。​ 一个是PageQueryUtil工具类,这个工具类是作为分页查询操作的一个"参......
  • C#之获取内网客户端ip地址
    直接上菜:///<summary>///获取客户端IP地址///</summary>///<returns></returns>publicstringGetClientIP(){try{stringresult=System.Web.HttpContext.Cur......
  • 软件开发的一些思考2
    看了一些软件设计方面的资料,大致印象是似乎都在强调灵活的设计,减少耦合,目的在于以后有变动时可以减少改动,这样也在一定程度上减少了出错的可能性。现在觉得今后的需求变动难以预料,但是设计时,防止将来可能出现的bug(而不是将来可能的需求变动),似乎更为重要。当然,将来可能出现的bug,......
  • Pomelo开发中Web客户端开发API简介
     使用pomelo做服务端开发时,无论什么客户端,只要能遵循与服务端的线上协议,就能够与服务端建立通信。pomelo内建提供的sioconnector和hybridconnector都定义了自己的协议格式,其中sioconnector用于socket.io的通信,hybridconnector则用来处理websocket和tcp的连接通信。为了方便客户......
  • 银河麒麟服务器V10 SP3 安装ZooKeeperZookeeper 图形化的客户端工具(ZooInspector)
    服务器zookeeper安装一、软件介绍1、ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。2、ZooKeeper的原理......
  • CXF入门教程(2) -- 第一个客户端
    文中对应的代码已经上传,与教程(1)中的service相对应。为调试方便,将service和client都放在了同一个工程中,不过是在不同的包中;本文对应的两个基本客户端在com.neareast.test.cxf.client.consumer包中,服务端ServiceTest类在com.neareast.test.cxf.server.service包中。代码地址如下:最常......
  • Generative AI 新世界 | 大型语言模型(LLMs)概述
    在上一篇《GenerativeAI新世界:文本生成领域论文解读》中,我带领大家一起梳理了文本生成领域(TextGeneration)的主要几篇论文:InstructGPT,RLHF,PPO,GPT-3,以及GPT-4。本期文章我将帮助大家一起梳理另一个目前炙手可热的话题:大型语言模型(LargeLanguageModels,或简写为LLMs)。亚马......
  • jsocks代理服务器和客户端的试用
    jsocks的项目位于:[url]http://jsocks.sourceforge.net/[/url]在GoogleCode上还有个对应的mirror的项目,是Google创建的,做了一些修改,看来Google是用到了它:[url]http://code.google.com/p/jsocks-mirror/[/url]上面的项目包括SOCKS代理服务器和......