CN117093284A - 插件调用方法、装置、介质和电子设备 - Google Patents

插件调用方法、装置、介质和电子设备 Download PDF

Info

Publication number
CN117093284A
CN117093284A CN202311063178.6A CN202311063178A CN117093284A CN 117093284 A CN117093284 A CN 117093284A CN 202311063178 A CN202311063178 A CN 202311063178A CN 117093284 A CN117093284 A CN 117093284A
Authority
CN
China
Prior art keywords
mode
plug
calling
calling mode
native
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311063178.6A
Other languages
English (en)
Inventor
杜立博
叶桐
黄晓强
柳泽镕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Douyin Vision Co Ltd
Original Assignee
Douyin Vision Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Douyin Vision Co Ltd filed Critical Douyin Vision Co Ltd
Priority to CN202311063178.6A priority Critical patent/CN117093284A/zh
Publication of CN117093284A publication Critical patent/CN117093284A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本公开涉及一种插件调用方法、装置、介质和电子设备,属于计算机技术领域,能够实现插件的高性能调用以及宿主与插件之间良好的隔离性。一种插件调用方法,包括:获取插件的当前调用方式,其中所述当前调用方式为第一调用方式和第二调用方式中的一者;在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件;若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者。

Description

插件调用方法、装置、介质和电子设备
技术领域
本公开涉及计算机技术领域,具体地,涉及一种插件调用方法、装置、介质和电子设备。
背景技术
对于go语言而言,在插件调用过程中,要么会因为插件发生错误而导致宿主进程一起奔溃退出,影响了宿主服务的稳定性,要么存在着插件的调用性能较低的问题。
发明内容
提供该发明内容部分以便以简要的形式介绍构思,这些构思将在后面的具体实施方式部分被详细描述。该发明内容部分并不旨在标识要求保护的技术方案的关键特征或必要特征,也不旨在用于限制所要求的保护的技术方案的范围。
第一方面,本公开提供一种插件调用方法,包括:获取插件的当前调用方式,其中所述当前调用方式为第一调用方式和第二调用方式中的一者;在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件;若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者。
第二方面,本公开提供一种插件调用装置,包括:获取模块,用于获取插件的当前调用方式,其中所述当前调用方式为第一调用方式和第二调用方式中的一者;监测模块,用于在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件;切换模块,用于若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者。
第三方面,本公开提供一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现第一方面中任一项所述方法的步骤。
第四方面,本公开提供一种电子设备,包括:存储装置,其上存储有计算机程序;处理装置,用于执行所述存储装置中的所述计算机程序,以实现第一方面中任一项所述方法的步骤。
通过采用上述技术方案,由于能够在当前调用方式下监测向第一调用方式和第二调用方式中的另一者切换的切换条件,并在监测到切换条件时从当前调用方式切换到第一调用方式和第二调用方式中的另一者,这样就能够确保始终以合适的调用方式来调用插件,既能够避免因插件发生错误而导致宿主进程一起奔溃退出,确保了宿主与插件之间良好的隔离性以及宿主服务的稳定性,又能够确保始终以高性能来调用插件。
本公开的其他特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。在附图中:
图1是根据本公开一种实施例的插件调用方法的流程图。
图2是根据本公开一种实施例的插件调用方法的又一流程图。
图3是根据本公开一种实施例的插件调用方法的又一流程图。
图4是根据本公开一种实施例的插件调用方法的又一流程图。
图5是根据本公开一种实施例的插件调用装置的示意框图。
图6示出适于用来实现本公开实施例的电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
可以理解的是,在使用本公开各实施例公开的技术方案之前,均应当依据相关法律法规通过恰当的方式对本公开所涉及个人信息的类型、使用范围、使用场景等告知用户并获得用户的授权。
例如,在响应于接收到用户的主动请求时,向用户发送提示信息,以明确地提示用户,其请求执行的操作将需要获取和使用到用户的个人信息。从而,使得用户可以根据提示信息来自主地选择是否向执行本公开技术方案的操作的电子设备、应用程序、服务器或存储介质等软件或硬件提供个人信息。
作为一种可选的但非限定性的实现方式,响应于接收到用户的主动请求,向用户发送提示信息的方式例如可以是弹窗的方式,弹窗中可以以文字的方式呈现提示信息。此外,弹窗中还可以承载供用户选择“同意”或者“不同意”向电子设备提供个人信息的选择控件。
可以理解的是,上述通知和获取用户授权过程仅是示意性的,不对本公开的实现方式构成限定,其它满足相关法律法规的方式也可应用于本公开的实现方式中。
同时,可以理解的是,本技术方案所涉及的数据(包括但不限于数据本身、数据的获取或使用)应当遵循相应法律法规及相关规定的要求。
在go语言中,通常有两种方式来实现热更新的插件功能。
第一种方式是基于go语言自身提供的插件机制。这种插件机制提供了近似于原生函数调用的调用性能,也即,在使用时,可以将插件逻辑通过go语言编译成一个插件,该插件本身不可以单独运行,但是go语言本身提供的入口能够将该插件加载进宿主服务内部,调用时直接解析加载返回的指针即可。这种调用方式可以称为原生插件调用方式。
第二种方式是基于进程间通信(Inter-Process Communication,IPC)的插件机制。这种插件机制将插件的内部逻辑封装为一个独立的进程,运行时宿主服务与插件之间通过IPC通信的方式进行通信,当需要进行更新时,重新拉起一个新的插件进程,然后回收旧的进程即可,宿主侧只需要维护一个与插件进程进行通信的句柄。这种调用方式可以称为IPC调用方式。
上述的插件实现技术在解决了热更新功能的同时也存在着一定的缺陷。对于第一种插件机制而言,由于插件与宿主运行在同一个进程内部,虽然可以带来极高的调用性能,但是如果插件发生错误(例如发生了panic),则有可能会导致宿主进程一起奔溃退出,影响宿主服务的稳定性。对于第二种插件机制而言,虽然能够提供插件与宿主之间良好的隔离性,但是,由于插件与宿主不是在同一个进程中,所以调用插件时需要进程序列化以及数据传输等操作,在调用性能方面较原生插件调用方式而言往往有数个数量级的差距,插件的调用性能较低。
图1是根据本公开一种实施例的插件调用方法的流程图。如图1所示,该插件调用方法包括以下步骤S11至S13。
在步骤S11中,获取插件的当前调用方式,其中所述当前调用方式为第一调用方式和第二调用方式中的一者。
在步骤S12中,在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件。
例如,若当前调用方式为第一调用方式,则会在第一调用方式下监测从第一调用方式向第二调用方式切换的切换条件;若当前调用方式为第二调用方式,则会在第二调用方式下,监测从第二调用方式向第一调用方式切换的切换条件。
在步骤S13中,若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者。
通过采用上述技术方案,由于能够在当前调用方式下监测向第一调用方式和第二调用方式中的另一者切换的切换条件,并在监测到切换条件时从当前调用方式切换到第一调用方式和第二调用方式中的另一者,这样就能够确保始终以合适的调用方式来调用插件,既能够避免因插件发生错误而导致宿主进程一起奔溃退出,确保了宿主与插件之间良好的隔离性以及宿主服务的稳定性,又能够确保始终以高性能来调用插件。
图2是根据本公开一种实施例的插件调用方法的又一流程图。该插件调用方法适用于第一调用方式为IPC调用方式、第二调用方式为原生插件调用方式的场景。其中,所述IPC调用方式是以IPC的方式调用所述插件的调用方式,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式。该插件调用方法包括以下步骤S21至S24。
在步骤S21中,确定插件的当前调用方式为IPC调用方式。
在步骤S22中,在所述IPC调用方式下,检测所述插件是否存在原生插件类型的编译产物。也即,该步骤实际上是在监测从IPC调用方式向原生插件调用方式进行切换的切换条件。原生插件类型的编译产物指的是该编译产物能够以类似于原生函数调用的方式进行调用。
在步骤S23中,若在所述IPC调用方式下检测到所述插件存在原生插件类型的编译产物,则从IPC调用方式切换到原生插件调用方式。该步骤实际上是在监测到切换条件时对插件的调用方式进行切换。
在步骤S24中,若在所述IPC调用方式下检测到所述插件不存在原生插件类型的编译产物,则仍然以IPC调用方式来调用所述插件。
通过采用上述技术方案,就能够在IPC调用方式下在检测到插件的原生插件类型的编译产物的情况下切换到原生插件调用方式,确保了插件以高性能进行调用。
在一些实施方式中,若在采用所述IPC调用方式调用所述插件期间检测到插件不存在原生插件类型的编译产物,则可以在采用所述IPC调用方式调用所述插件期间,对所述插件进行编译得到所述原生插件类型的编译产物。编译得到的原始插件类型的编译产物可以存储到本地或者云端。
为了对插件进行编译,可以在插件与宿主通过IPC通信方式进行通信期间(也即在采用IPC调用方式对插件进行调用期间),异步地收集宿主的当前环境信息,并基于宿主的当前环境信息对插件进行编译,得到原生插件类型的编译产物。
另外,在编译完成后,可以将编译得到的原生插件类型的编译产物发送到宿主进程的运行环境中,便于宿主以类似于原生函数调用的方式对原生插件类型的编译产物进行调用。
通过上述技术方案,就能够在采用所述IPC调用方式调用所述插件期间对插件进行编译得到原生插件类型的编译产物,进而能够实现向原生插件调用方式的切换,确保以高性能对插件进行调用。
图3是根据本公开一种实施例的插件调用方法的又一流程图。该插件调用方法适用于第一调用方式为IPC调用方式、第二调用方式为原生插件调用方式的场景。其中,所述IPC调用方式是以IPC的方式调用所述插件的调用方式,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式。该插件调用方法包括以下步骤S31至S33。
在步骤S31中,确定插件的当前调用方式为原生插件调用方式。
在步骤S32中,在采用原生插件调用方式调用所述插件期间,对宿主的进程进行监测并基于监测到的宿主进程信息确定所述宿主的进程是否发生崩溃。这实际上是在监测从原生插件调用方式向IPC调用方式进行切换的切换条件。
其中,所述宿主进程信息可以包括所述宿主的进程自身的状态以及相关堆栈与日志信息。
在步骤S33中,若确定所述宿主的进程发生了崩溃,则从原生插件调用方式切换到IPC调用方式。这实际上是在监测到切换条件时对插件的调用方式进行切换。
通过采用上述技术方案,由于能够在当前采用原生插件调用方式调用所述插件的场景下,对宿主的进程进行监测,基于监测到的宿主进程信息确定所述宿主的进程是否发生崩溃,并在确定所述宿主的进程发生了崩溃的情况下从原生插件调用方式切换到IPC调用方式来调用所述插件,这样就能够在插件发生panic、导致宿主进程一起崩溃退出并影响宿主服务稳定性的情况下,自动地将插件从宿主进程中隔离出去,使得插件以独立进程的方式运行,即使插件再次发生崩溃也不会对宿主服务再次产生影响,实现了插件与宿主之间的良好的隔离性。
图4是根据本公开一种实施例的插件调用方法的又一流程图。
如图4所示,在宿主的进程启动之后,会监测插件是否存在原生插件类型的编译产物(对应于图4中的对切换条件进行监测),如果监测到插件存在原生插件类型的编译产物,则采用原生插件调用方式来调用插件,如果监测到插件不存在原生插件类型的编译产物,则采用IPC调用方式来调用插件。
在当前采用IPC调用方式调用插件的情况下,插件会以独立进程的方式运行,通过IPC通信与宿主进行通信,另外,根据本公开实施例的插件调用方法还会异步收集宿主的当前环境信息,基于宿主的当前环境信息开始处理自动编译逻辑,将插件代码编译成原生插件,编译完成后会将对应的编译产物发送到宿主进程的运行环境中。同时,根据本公开实施例的插件调用方法还会定时对原生插件类型的编译产物进行探测,当探测到原生插件类型的编译产物已经编译并发送到了宿主进程的运行环境中之后,会自动将原生插件类型的编译产物加载到宿主进程内部,以原生插件的方式运行起来,同时会自动将原本的IPC调用方式切换为原生插件调用方式,这样,就能够在宿主进程运行的绝大部分时间都以原生插件调用方式来调用插件,实现插件的高性能调用。
在当前以原生插件调用方式调用插件期间,根据本公开实施例的插件调用方法会开启一个旁路的监控进程,该监控进程会实时监控宿主进程信息,包括宿主进程本身的状态以及相关堆栈与日志信息。如果根据宿主进程信息发现插件代码导致宿主进程发生了崩溃退出,则会将插件的调用方式从原生插件调用方式切换到IPC调用方式,这样,若插件代码再次崩溃退出也不会影响到宿主本身的稳定性,实现了宿主与插件之间良好的隔离性。
通过采用上述技术方案,在插件调用时,能够基于切换条件在原生插件调用方式与IPC调用方式之间自动切换,在宿主运行的大部分调用场景下宿主都能够通过原生插件调用方式来调用插件,使得插件的调用性能与原生函数调用的调用性能类似,而当插件发生panic导致宿主进程一起崩溃退出、影响宿主服务稳定性时,能够通过切换到IPC调用方式而自动将插件从宿主进程中隔离出去,使得插件以独立进程的方式运行,实现了插件与宿主之间良好的隔离性,这样,即使再次发生插件panic也不会对宿主服务再次产生影响。当插件的维护人员解决掉插件panic问题之后,能够继续以原生插件调用方式来调用插件,保持了插件的高性能调用,而在插件调用方式的切换期间,宿主服务不会有任何感知。因此,本公开能够在兼顾插件高性能调用的同时实现插件与宿主之间良好的隔离性。
在一些实施例中,根据本公开实施例的方法还可以包括:在宿主进程启动时,默认以原生插件调用方式调用所述插件,其中,所述原生插件调用方式为所述第一调用方式和所述第二调用方式中的一者,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式。之所以在宿主进程启动时默认以原生插件调用方式调用所述插件,是因为原生插件调用方式能够以高性能来调用插件。
图5是根据本公开一种实施例的插件调用装置的示意框图。如图5所示,该插件调用装置包括:获取模块51,用于获取插件的当前调用方式,其中所述当前调用方式为第一调用方式和第二调用方式中的一者;监测模块52,用于在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件;切换模块53,用于若监测模块52监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者。
通过采用上述技术方案,由于能够在当前调用方式下监测向第一调用方式和第二调用方式中的另一者切换的切换条件,并在监测到切换条件时从当前调用方式切换到第一调用方式和第二调用方式中的另一者,这样就能够确保始终以合适的调用方式来调用插件,既能够避免因插件发生错误而导致宿主进程一起奔溃退出,确保了宿主与插件之间良好的隔离性以及宿主服务的稳定性,又能够确保始终以高性能来调用插件。
可选地,所述第一调用方式为IPC调用方式,所述第二调用方式为原生插件调用方式,所述IPC调用方式是以IPC的方式调用所述插件的调用方式,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式;
所述当前调用方式为所述IPC调用方式,则:
所述监测模块52在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件,包括:在所述IPC调用方式下,检测所述插件是否存在原生插件类型的编译产物;
所述切换模块53在若监测到所述切换条件时,从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者,包括:若在所述IPC调用方式下检测到所述插件存在原生插件类型的编译产物,则从所述IPC调用方式切换到所述原生插件调用方式。
可选地,所述插件调用装置还包括编译模块,用于若在所述IPC调用方式下检测到所述插件不存在原生插件类型的编译产物,则在采用所述IPC调用方式调用所述插件期间,对所述插件进行编译得到所述原生插件类型的编译产物。
可选地,所述插件调用装置还包括发送模块,用于在所述编译模块编译完成后,将编译得到的原生插件类型的编译产物发送到宿主进程的运行环境中。
可选地,所述第一调用方式为IPC调用方式,所述第二调用方式为原生插件调用方式,所述IPC调用方式是以IPC的方式调用所述插件的调用方式,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式;
所述当前调用方式为所述原生插件调用方式,则:
所述监测模块52在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件,包括:在所述原生插件调用方式下,对宿主的进程进行监测,并基于监测到的宿主进程信息确定所述宿主的进程是否发生崩溃;
所述切换模块53在若监测到所述切换条件时,从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者,包括:若确定所述宿主的进程发生了崩溃,则从所述原生插件调用方式切换到所述IPC调用方式。
可选地,所述宿主进程信息包括所述宿主的进程自身的状态以及相关堆栈与日志信息。
可选地,所述插件调用装置还包括默认模块,用于在宿主进程启动时,默认以原生插件调用方式调用所述插件,其中,所述原生插件调用方式为所述第一调用方式和所述第二调用方式中的一者,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式。
本公开还提供一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时本公开中任一项所述方法的步骤。
本公开还提供一种电子设备,包括:存储装置,其上存储有计算机程序;处理装置,用于执行所述存储装置中的所述计算机程序,以实现本公开中任一项所述方法的步骤。
下面参考图6,其示出了适于用来实现本公开实施例的电子设备600的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图6示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,电子设备600可以包括处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有电子设备600操作所需的各种程序和数据。处理装置601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
通常,以下装置可以连接至I/O接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608;以及通信装置609。通信装置609可以允许电子设备600与其他设备进行无线或有线通信以交换数据。虽然图6示出了具有各种装置的电子设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从ROM 602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取插件的当前调用方式,其中所述当前调用方式为第一调用方式和第二调用方式中的一者;在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件;若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言——诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)——连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定,例如,监测模块还可以被描述为“在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件的模块”。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
根据本公开的一个或多个实施例,示例1提供了一种插件调用方法,包括:获取插件的当前调用方式,其中所述当前调用方式为第一调用方式和第二调用方式中的一者;在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件;若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者。
根据本公开的一个或多个实施例,示例2提供了示例1的方法,其中,所述第一调用方式为IPC调用方式,所述第二调用方式为原生插件调用方式,所述IPC调用方式是以IPC的方式调用所述插件的调用方式,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式;
所述当前调用方式为所述IPC调用方式,则:
所述在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件,包括:在所述IPC调用方式下,检测所述插件是否存在原生插件类型的编译产物;
所述若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者,包括:若在所述IPC调用方式下检测到所述插件存在原生插件类型的编译产物,则从所述IPC调用方式切换到所述原生插件调用方式。
根据本公开的一个或多个实施例,示例3提供了示例2的方法,其中,所述方法还包括:若在所述IPC调用方式下检测到所述插件不存在原生插件类型的编译产物,则在采用所述IPC调用方式调用所述插件期间,对所述插件进行编译得到所述原生插件类型的编译产物。
根据本公开的一个或多个实施例,示例4提供了示例3的方法,其中,所述方法还包括:在编译完成后,将编译得到的原生插件类型的编译产物发送到宿主进程的运行环境中。
根据本公开的一个或多个实施例,示例5提供了示例1的方法,其中,所述第一调用方式为IPC调用方式,所述第二调用方式为原生插件调用方式,所述IPC调用方式是以IPC的方式调用所述插件的调用方式,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式;
所述当前调用方式为所述原生插件调用方式,则:
所述在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件,包括:在所述原生插件调用方式下,对宿主的进程进行监测,并基于监测到的宿主进程信息确定所述宿主的进程是否发生崩溃;
所述若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者,包括:若确定所述宿主的进程发生了崩溃,则从所述原生插件调用方式切换到所述IPC调用方式。
根据本公开的一个或多个实施例,示例6提供了示例5的方法,其中,所述宿主进程信息包括所述宿主的进程自身的状态以及相关堆栈与日志信息。
根据本公开的一个或多个实施例,示例7提供了示例1的方法,其中,所述方法还包括:在宿主进程启动时,默认以原生插件调用方式调用所述插件,其中,所述原生插件调用方式为所述第一调用方式和所述第二调用方式中的一者,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式。
根据本公开的一个或多个实施例,示例8提供了一种插件调用装置,包括:获取模块,用于获取插件的当前调用方式,其中所述当前调用方式为第一调用方式和第二调用方式中的一者;监测模块,用于在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件;切换模块,用于若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者。
根据本公开的一个或多个实施例,示例9提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现示例1-7中任一项所述方法的步骤。
根据本公开的一个或多个实施例,示例10提供了一种电子设备,包括:存储装置,其上存储有计算机程序;处理装置,用于执行所述存储装置中的所述计算机程序,以实现示例1-7中任一项所述方法的步骤。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

Claims (10)

1.一种插件调用方法,其特征在于,包括:
获取插件的当前调用方式,其中所述当前调用方式为第一调用方式和第二调用方式中的一者;
在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件;
若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者。
2.根据权利要求1所述的方法,其特征在于,所述第一调用方式为IPC调用方式,所述第二调用方式为原生插件调用方式,所述IPC调用方式是以IPC的方式调用所述插件的调用方式,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式;
所述当前调用方式为所述IPC调用方式,则:
所述在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件,包括:在所述IPC调用方式下,检测所述插件是否存在原生插件类型的编译产物;
所述若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者,包括:若在所述IPC调用方式下检测到所述插件存在原生插件类型的编译产物,则从所述IPC调用方式切换到所述原生插件调用方式。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若在所述IPC调用方式下检测到所述插件不存在原生插件类型的编译产物,则在采用所述IPC调用方式调用所述插件期间,对所述插件进行编译得到所述原生插件类型的编译产物。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在编译完成后,将编译得到的原生插件类型的编译产物发送到宿主进程的运行环境中。
5.根据权利要求1所述的方法,其特征在于,所述第一调用方式为IPC调用方式,所述第二调用方式为原生插件调用方式,所述IPC调用方式是以IPC的方式调用所述插件的调用方式,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式;
所述当前调用方式为所述原生插件调用方式,则:
所述在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件,包括:在所述原生插件调用方式下,对宿主的进程进行监测,并基于监测到的宿主进程信息确定所述宿主的进程是否发生崩溃;
所述若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者,包括:若确定所述宿主的进程发生了崩溃,则从所述原生插件调用方式切换到所述IPC调用方式。
6.根据权利要求5所述的方法,其特征在于,所述宿主进程信息包括所述宿主的进程自身的状态以及相关堆栈与日志信息。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:在宿主进程启动时,默认以原生插件调用方式调用所述插件,其中,所述原生插件调用方式为所述第一调用方式和所述第二调用方式中的一者,所述原生插件调用方式是以原生插件的方式调用所述插件的调用方式。
8.一种插件调用装置,其特征在于,包括:
获取模块,用于获取插件的当前调用方式,其中所述当前调用方式为第一调用方式和第二调用方式中的一者;
监测模块,用于在所述当前调用方式下,监测向所述第一调用方式和所述第二调用方式中的另一者切换的切换条件;
切换模块,用于若监测到所述切换条件,则从所述当前调用方式切换到所述第一调用方式和所述第二调用方式中的所述另一者。
9.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理装置执行时实现权利要求1-7中任一项所述方法的步骤。
10.一种电子设备,其特征在于,包括:
存储装置,其上存储有计算机程序;
处理装置,用于执行所述存储装置中的所述计算机程序,以实现权利要求1-7中任一项所述方法的步骤。
CN202311063178.6A 2023-08-22 2023-08-22 插件调用方法、装置、介质和电子设备 Pending CN117093284A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311063178.6A CN117093284A (zh) 2023-08-22 2023-08-22 插件调用方法、装置、介质和电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311063178.6A CN117093284A (zh) 2023-08-22 2023-08-22 插件调用方法、装置、介质和电子设备

Publications (1)

Publication Number Publication Date
CN117093284A true CN117093284A (zh) 2023-11-21

Family

ID=88781584

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311063178.6A Pending CN117093284A (zh) 2023-08-22 2023-08-22 插件调用方法、装置、介质和电子设备

Country Status (1)

Country Link
CN (1) CN117093284A (zh)

Similar Documents

Publication Publication Date Title
CN111367516B (zh) 应用界面生成方法、装置及电子设备
CN111274503B (zh) 数据处理的方法、装置、电子设备及计算机可读介质
CN110727566B (zh) 一种获取进程崩溃信息的方法、装置、介质和电子设备
CN111625422B (zh) 线程监控方法、装置、电子设备及计算机可读存储介质
CN110554918B (zh) 限流方法、装置、电子设备和计算机可读存储介质
CN111460432B (zh) 在线文档权限控制方法、装置、设备及计算机可读介质
CN111596992B (zh) 导航栏展示方法、装置和电子设备
CN113518183B (zh) 摄像头调用方法、装置和电子设备
CN112817701B (zh) 定时器处理方法、装置、电子设备和计算机可读介质
CN111538717B (zh) 数据处理的方法、装置、电子设备及计算机可读介质
CN111309323B (zh) 参数初始化方法、装置和电子设备
CN110764995B (zh) 一种检测文件访问异常的方法、装置、介质和电子设备
CN117093284A (zh) 插件调用方法、装置、介质和电子设备
CN111367555B (zh) 断言的方法、装置、电子设备及计算机可读介质
CN112486826B (zh) 测试方法、装置、电子设备及计算机可读介质
CN111078259B (zh) 一种音频打包方法、装置、电子设备及存储介质
CN116401173A (zh) 测试用例生成方法、装置、介质及电子设备
CN110750242B (zh) 一种部署文件的方法、系统、介质和电子设备
CN116755796A (zh) 插件管理方法、装置、介质和电子设备
CN116069403A (zh) 一种通信扩展方法、装置、设备及介质
CN116755795A (zh) 插件管理方法、装置、介质和电子设备
CN117493091A (zh) 存储系统故障注入方法、装置、设备及存储介质
CN116346924A (zh) 网络请求处理方法、装置、设备及存储介质
CN116302142A (zh) 生命周期事件管理方法、装置、存储介质以及电子设备
CN117290038A (zh) 应用分发方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination