基于Electron平台的播放终端异常处理方法及装置
技术领域
本公开通常涉及计算机应用技术,更具体地,涉及用于处理基于Electron平台的播放终端异常的方法及装置。
背景技术
目前,大屏广告被越来越多地使用来进行广告宣传,比如商品广告宣传,文娱事件宣传等。大屏广告通常采用基于Electron平台开发的播控终端进行播放。在进行广告播放时,每个广告播放会有固定的时长。一旦出现播放终端异常并且不能及时恢复,则会导致广告播放时长变短,由此造成资产损失。
发明内容
鉴于上述问题,本公开提供了一种用于处理基于Electron平台的播放终端异常的方法及装置。利用该方法及装置,能够及时检测和恢复播放终端异常,从而降低资产损失和人力维护成本。
根据本公开的一个方面,提供了一种用于处理基于Electron平台的播放终端异常的方法,包括:检测播放终端异常事件,所述播放终端异常事件包括主进程异常、渲染进程异常、页面无响应异常和/或HTML5页面异常;在所检测到的播放终端异常事件是Electron应用的主进程异常时,经由守护进程中的应用重启模块来重启所述Electron应用以恢复主进程的运行;在所检测到播放终端异常事件是渲染进程异常或页面无响应异常时,经由主进程的错误处理模块来重启对应的渲染进程;或者在所检测到的播放终端异常事件是HTML5页面异常时,经由渲染进程的错误处理模块来加载对应的HTML5页面。
可选地,在上述方面的一个示例中,检测播放终端异常事件可以包括:经由所述守护进程定期检查所述播放终端的***进程列表中的主进程是否在运行来检测是否发生主进程异常。
可选地,在上述方面的一个示例中,检测播放终端异常事件可以包括:经由所述Electron平台的崩溃异常检测模块来检测是否发生渲染进程异常;或者经由所述守护进程定期检查所述播放终端的***进程列表中的渲染进程是否在运行来检测是否发生渲染进程异常。
可选地,在上述方面的一个示例中,检测播放终端异常事件可以包括:经由所述主进程使用心跳消息检测机制来检测正在运行中的渲染进程是否发生页面无响应异常。
可选地,在上述方面的一个示例中,经由所述主进程使用心跳消息检测机制来检测正在运行中的渲染进程是否发生页面无响应异常可以包括:经由主进程向正在运行中的渲染进程发送心跳消息;以及响应于没有从渲染进程接收到心跳消息的响应消息,确定渲染进程发生页面无响应异常。
可选地,在上述方面的一个示例中,检测播放终端异常事件可以包括:经由渲染进程使用HTLM5页面中注册的错误处理函数来捕获页面错误事件,检测是否发生HTLM5页面异常。
可选地,在上述方面的一个示例中,所述错误处理函数包括下述错误处理函数中的至少一个:window.onerror和window.onunhandledrejection;以及所述页面错误事件包括下述页面错误事件中的至少一个:WebGL的webglcontextlost事件、视频和音频的Stalled事件。
根据本公开的另一方面,提供一种用于处理基于Electron平台的播放终端异常的装置,包括:异常事件检测单元,检测播放终端异常事件,所述播放终端异常事件包括主进程异常、渲染进程异常、页面无响应异常和/或HTML5页面异常;主进程恢复单元,在所检测到的播放终端异常事件是Electron应用的主进程异常时,经由守护进程中的应用重启模块来重启所述Electron应用以恢复所述主进程的运行;渲染进程恢复单元,在所检测到播放终端异常事件是渲染进程异常或页面无响应异常时,经由所述主进程的错误处理模块来重启对应的渲染进程;以及页面恢复单元,在所检测到的播放终端异常事件是HTML5页面异常时,经由所述渲染进程的错误处理模块来加载对应的HTML5页面。
可选地,在上述方面的一个示例中,所述异常事件检测单元可以包括:主进程异常检测模块,经由所述守护进程定期检查所述播放终端的***进程列表中的主进程是否在运行来检测是否发生主进程异常。
可选地,在上述方面的一个示例中,所述异常事件检测单元可以包括:渲染进程异常检测模块,经由所述Electron平台的崩溃异常检测模块来检测是否发生渲染进程异常,或者经由所述守护进程定期检查所述播放终端的***进程列表中的渲染进程是否在运行来检测是否发生渲染进程异常。
可选地,在上述方面的一个示例中,所述异常事件检测单元可以包括:页面响应异常检测模块,经由所述主进程使用心跳消息检测机制来检测正在运行中的渲染进程是否发生页面无响应异常。
可选地,在上述方面的一个示例中,所述异常事件检测单元可以包括:页面异常检测模块,经由渲染进程使用HTLM5页面中注册的错误处理函数来捕获页面错误事件,检测是否发生HTLM5页面异常。
根据本公开的又一方面,还提供一种计算设备,包括:一个或多个处理器,以及与所述一个或多个处理器耦合的存储器,所述存储器存储指令,当所述指令被所述一个或多个处理器执行时,使得所述至少一个处理器执行如上所述的用于处理基于Electron平台的播放终端异常的方法。
根据本公开的再一方面,还提供一种机器可读存储介质,其存储有可执行指令,所述指令当被执行时使得所述机器执行如上所述的用于处理基于Electron平台的播放终端异常的方法。
根据本公开的用于处理基于Electron平台的播放终端异常的方法及装置,能够及时检测和恢复播放终端中发生的各种播放终端异常,从而降低资产损失和人力维护成本。
附图说明
通过参照下面的附图,可以实现对于本公开内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。
图1示出了根据本公开的实施例的用于处理基于Electron平台的播放终端异常的方法的流程图;
图2示出了根据本公开的实施例的播放终端异常检测的一个示例过程的流程图;
图3示出了根据本公开的实施例的用于检测页面无响应异常的过程的示意图;
图4示出了根据本公开的实施例的播放终端中的各个进程之间的关系图;
图5示出了根据本公开的实施例的播放终端异常处理装置的方框图;
图6示出了根据本公开的实施例的异常事件检测单元的一个示例的方框图;
图7示出了根据本公开的实施例的用于处理基于Electron平台的播放终端异常的计算设备的方框图。
具体实施方式
现在将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本公开内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。例如,所描述的方法可以按照与所描述的顺序不同的顺序来执行,以及各个步骤可以被添加、省略或者组合。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。
如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
如本文中使用的,术语“Electron”是指由Github开发的使用HTML,CSS和JavaScript来构建跨平台桌面应用程序的开源库。具体地,Electron使用Node.js(作为后端)和Chromium(作为前端)完成桌面GUI应用程序的跨平台开发。目前,Electron已经创建了包括VScode和Atom在内的大量应用程序。
如本文中使用的,术语“主进程异常”是指主进程崩溃异常。术语“渲染进程异常”是指渲染进程崩溃异常。术语“PNR异常”是指渲染进程中所显示的页面无响应而导致的异常。比如,页面由于运行了错误逻辑导致卡死(PNR异常),从而使得在PNR异常后,页面无法与用户进行任何交互操作。术语“HTML5页面异常”是指渲染进程中显示的HTML5页面的异常。
在Electron平台下,整个应用程序的运行是使用多进程的方式运行。用于页面交互的可视化界面是在渲染进程(Render Process)中运行的。用于管理所有Render Process的进程称之为主进程(Main Process)。主进程是应用程序的入口进程。
在现有的Electron平台技术中,使用Electron平台的崩溃(Crash)异常处理机制来进行播放终端异常检测和恢复。然而,这种异常处理机制只能检测并恢复RenderProcess的崩溃异常,而无法处理Main Process的崩溃异常和Render Process的PNR异常,从而使得异常恢复处理不完整,导致在很多异常情况下无法实现异常检测和恢复。
在本公开中,提供了一种能够实现完整异常恢复处理的技术方案,在该方案中,能够检测出Main Process异常、Render Process异常、PNR异常和HTML5页面异常,并且提供相应的恢复方案来进行异常恢复处理。
图1示出了根据本公开的实施例的用于处理基于Electron平台的播放终端异常的方法的流程图。
如图1所示,在块110,检测基于Electron平台的播放终端是否发生播放终端异常事件。所述播放终端异常事件包括主进程崩溃异常、渲染进程崩溃异常、页面无响应异常和/或HTML5页面异常。如何检测基于Electron平台的播放终端是否发生播放终端异常事件,将在下面参考图2-图4进行描述。
在检测到基于Electron平台的播放终端发生播放终端异常事件后,基于所检测到的播放终端异常事件类型来进行相应的异常恢复处理。
具体地,在所检测到的播放终端异常事件是Electron应用(Electron APP)的MainProcess异常时,在块121,经由守护进程(Agent APP,也可以称为“守护代理”)中的应用重启(APP Restart)模块来重启Electron应用以恢复Main Process的运行。这里,Agent APP是与Electron APP彼此独立的应用程序。通常,Agent APP和Electron APP被安装在例如用于播放广告的播放终端上。Main Process和Render Process是Electron APP中运行的进程。
在所检测到播放终端异常事件是Render Process异常时,在块123,经由MainProcess的错误处理(Error Handler)模块来重启对应的Render Process。
在所检测到播放终端异常事件是PNR异常时,在块125,经由Main Process的ErrorHandler模块来重启对应的Render Process。
在所检测到的播放终端异常事件是HTML5页面异常时,在块127,经由RenderProcess的Error Handler模块来加载对应的HTML5页面。例如,通过Error Handler模块来刷新页面、记录前端错误日志从而完成整个HTLM5页面的恢复过程。
图2示出了根据本公开的实施例的播放终端异常检测的一个示例过程的流程图。
如图2所示,首先,在块111,检测播放终端是否发生Main Process异常。例如,在一个示例中,可以经由Agent APP定期检查播放终端的***进程列表中的Main Process是否在运行来检测是否发生Main Process异常。
在检测到发生Main Process异常时,进行到块121,执行Main Process异常恢复过程。在未检测到发生Main Process异常时,流程进行到块113。
在块113,检测播放终端是否发生Render Process异常。例如,在一个示例中,可以经由Electron平台的崩溃异常检测模块来检测是否发生渲染进程异常。或者,在另一示例中,可以经由Agent APP定期检查播放终端的***进程列表中的渲染进程是否在运行,来检测是否发生渲染进程异常。
在检测到发生Render Process异常时,进行到块123,执行Render Process异常恢复过程。在未检测到发生Render Process异常时,流程进行到块115。
在块115,检测播放终端是否发生PNR异常。例如,在一个示例中,可以经由主进程使用心跳消息检测机制来检测正在运行中的渲染进程是否发生页面无响应异常。
图3示出了根据本公开的实施例的用于检测PNR异常的过程的示意图。
如图3所示,在块310,Main Process向正在运行中的Render Process发送心跳消息。然后,在块320,Main Process监测是否从Render Process接收到针对心跳消息的响应消息(即,心跳响应)。这里要说明的是,在一个示例中,Main Process可以在预定监测时段内监测是否从Render Process接收到心跳响应。所述预定监测时段例如是从发送完心跳消息后的一段预定时间。
如果没有接收到心跳响应,例如,如果在预定监测时段内没有接收到心跳响应,则在块330,确定发生PNR异常。如果接收到心跳响应,则在块340,确定没有发生PNR异常,即,页面响应正常。
在检测到发生PNR异常时,进行到块125,执行PNR异常恢复过程。在未检测到发生PNR异常时,流程进行到块117。
在块117,检测是否发生HTML5页面异常。例如,在一个示例中,可以经由RenderProcess使用HTLM5页面中注册的错误处理函数来捕获页面错误事件,由此检测是否发生HTLM5页面异常。在本公开中,所述错误处理函数可以包括下述错误处理函数中的至少一个:window.onerror和window.onunhandledrejection。所述页面错误事件可以包括下述页面错误事件中的至少一个:WebGL的webglcontextlost事件、视频和音频的Stalled事件。
在检测到发生HTLM5页面异常时,进行到块127,执行HTML5页面异常恢复过程。在未检测到发生HTML5页面异常时,流程进行到块111,继续进行播放终端异常事件监测。
图4示出了根据本公开的实施例的播放终端中的各个进程之间的关系图。如图4所示,在本公开中,所涉及的进程包括Agent APP(守护进程)、Main Process和RenderProcess。Main Process和Render Process是Electron APP中运行的进程。
Agent APP上设置有APP Restart模块和进程监测(Process Monitor)模块。Process Monitor模块可以定期检查播放终端的***进程列表中的Main Process和/或Render Process是否在运行,来检测是否发生Main Process异常和/或Render Process异常。在发生Main Process异常时,APP Restart模块重启Electron应用来恢复Main Process的运行。
Main Process上设置有Error Handler模块和心跳发送(Heart Beat Sender)模块。在发生Render Process异常或PNR异常时,Error Handler模块重启对应的RenderProcess来恢复Render Process的运行。Heart Beat Sender模块定期地向Render Process的心跳接收(Heart Beat Receiver)模块发送心跳消息,以用于检测是否发生PNR异常。
Render Process上设置有Error Handler模块、Heart Beat Receiver模块和HTML5错误监测模块。HTML5错误监测模块可以使用HTLM5页面中注册的错误处理函数来捕获页面错误事件,由此检测是否发生HTLM5页面异常。所述错误处理函数可以包括window.onerror和/或window.onunhandledrejection。所述页面错误事件可以包括WebGL的webglcontextlost事件、视频和音频的Stalled事件中的至少一个。在发生HTLM5异常时,Error Handler模块加载对应的HTML5页面来完成整个HTLM5页面的恢复过程。
如上参照图1到图4描述了根据本公开的实施例的基于Electron平台的播放终端的播放终端异常处理方法。
这里要说明的是,在图2中示出的播放终端异常事件检测过程中,Main Process异常、Render Process异常、PNR异常和HTML5页面异常是顺序检测的。在本公开的其它实施例中,Main Process异常、Render Process异常、PNR异常和HTML5页面异常的检测也可以是独立检测的。例如,Main Process异常、Render Process异常、PNR异常和HTML5页面异常中的至少两个是并行检测的。
图5示出了根据本公开的实施例的播放终端异常处理装置500的方框图。
如图5所示,播放终端异常处理装置500包括异常检测单元510、主进程恢复单元520、渲染进程恢复单元530和页面恢复单元540。
异常事件检测单元510被配置为检测播放终端异常事件,所述播放终端异常事件包括主进程异常、渲染进程异常、页面无响应异常和/或HTML5页面异常。
主进程恢复单元520被配置为在所检测到的播放终端异常事件是Electron应用的主进程异常时,经由Agent APP中的APP Restart模块来重启Electron应用以恢复MainProcess的运行。
渲染进程恢复单元530被配置为在所检测到的播放终端异常事件是渲染进程异常或页面无响应异常时,经由Main Process的Error Handler模块来重启对应的RenderProcess,以恢复渲染进程异常或页面无响应异常。
页面恢复单元540被配置为在所检测到的播放终端异常事件是HTML5页面异常时,经由Render Process的Error Handler模块来加载对应的HTML5页面,以恢复HTML5页面异常。
图6示出了根据本公开的实施例的异常事件检测单元510的一个示例的方框图。如图6所示,异常事件检测单元510包括主进程异常检测模块511、渲染进程异常检测模块513、页面响应异常检测模块515和页面异常检测模块517。
主进程异常检测模块511被配置为经由Agent APP定期检查播放终端的***进程列表中的Main Process是否在运行来检测是否发生主进程异常。
渲染进程异常检测模块513被配置为经由Electron平台的崩溃异常检测模块来检测是否发生渲染进程异常,或者经由Agent APP定期检查播放终端的***进程列表中的Render Process是否在运行来检测是否发生渲染进程异常。
页面响应异常检测模块515被配置为经由Main Process使用心跳消息检测机制来检测正在运行中的Render Process是否发生PNR异常。
页面异常检测模块517被配置为经由Render Process使用HTLM5页面中注册的错误处理函数来捕获页面错误事件,检测是否发生HTLM5页面异常。
如上参照图1到图6,对根据本公开的用于处理基于Electron平台的播放终端异常的方法及播放终端异常处理装置的实施例进行了描述。上面的播放终端异常处理装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。
图7为根据本公开的实施例的用于处理基于Electron平台的播放终端异常的计算设备的结构框图。
如图7所示,计算设备700可以包括至少一个处理器710、存储器720、内存730、通信接口740以及内部总线750,并且至少一个处理器710、存储器720、内存730和通信接口740经由总线750连接在一起。该至少一个处理器710执行在计算机可读存储介质(即,存储器720)中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器720中存储有计算机可执行指令,其当执行时使得至少一个处理器710:检测播放终端异常事件,所述播放终端异常事件包括主进程异常、渲染进程异常、页面无响应异常和/或HTML5页面异常;在所检测到的播放终端异常事件是Electron应用的主进程异常时,经由守护进程中的应用重启模块来重启所述Electron应用以恢复主进程的运行;在所检测到的播放终端异常事件是渲染进程异常或页面无响应异常时,经由主进程的错误处理模块来重启对应的渲染进程;或者在所检测到的播放终端异常事件是HTML5页面异常时,经由渲染进程的错误处理模块来加载对应的HTML5页面。
应该理解的是,在存储器720中存储的计算机可执行指令当执行时使得至少一个处理器710进行本公开的各个实施例中以上结合图1-6描述的各种操作和功能。
在本公开中,计算设备700可以包括但不限于:个人计算机、服务器计算机、工作站、桌面型计算机、膝上型计算机、笔记本计算机、移动计算设备、智能电话、平板计算机、蜂窝电话、个人数字助理(PDA)、手持装置、消息收发设备、可佩戴计算设备、消费电子设备等等。
根据一个实施例,提供了一种例如非暂时性机器可读介质的程序产品。非暂时性机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本公开的各个实施例中以上结合图1-6描述的各种操作和功能。
具体地,可以提供配有可读存储介质的***或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该***或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。
可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
本领域技术人员应当理解,上面公开的各个实施例可以在不偏离发明实质的情况下做出各种变形和修改。因此,本发明的保护范围应当由所附的权利要求书来限定。
需要说明的是,上述各流程和各***结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
以上各实施例中,硬件单元或模块可以通过机械方式或电气方式实现。例如,一个硬件单元、模块或处理器可以包括永久性专用的电路或逻辑(如专门的处理器,FPGA或ASIC)来完成相应操作。硬件单元或处理器还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。
上面结合附图阐述的具体实施方式描述了示例性实施例,但并不表示可以实现的或者落入权利要求书的保护范围的所有实施例。在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
本公开内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本公开内容。对于本领域普通技术人员来说,对本公开内容进行的各种修改是显而易见的,并且,也可以在不脱离本公开内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本公开内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。