CN116048668A - 基于web操作系统的应用插件通信系统 - Google Patents
基于web操作系统的应用插件通信系统 Download PDFInfo
- Publication number
- CN116048668A CN116048668A CN202310322546.8A CN202310322546A CN116048668A CN 116048668 A CN116048668 A CN 116048668A CN 202310322546 A CN202310322546 A CN 202310322546A CN 116048668 A CN116048668 A CN 116048668A
- Authority
- CN
- China
- Prior art keywords
- data
- type
- communication
- plug
- communication system
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate
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
基于web操作系统的应用插件通信系统,通过通信通道模块和通信数据管理模块实现web应用程序和插件程序之间的数据通信、数据封装及数据解封装;数据通信时,发送端的数据通过通信通道模块被发送至通信数据管理模块,通信数据管理模块对数据进行处理后,经通信通道模块转发至接收端。其中,通信系统对web应用发送和接收的数据实现自动封装、解封装功能;而通信系统与插件程序之间仅传递经封装后的数据,在插件程序需要获取真实的数据内容时,通过通信数据管理模块提供的数据解封功能,将数据解封装以获取得真实数据。本发明通过对通信的数据进行封装,保证了C语言插件对通信数据的可读性;抽象化具体的数据信息,避免过载。
Description
技术领域
本发明涉及web开发技术领域,具体涉及基于web操作系统的应用插件通信系统。
背景技术
传统插件通信机制仅支持字符串传输,在简单、信息量少的场景下可以高效率运行,但对于处理复杂数据以及信息冗杂的情况却力有未逮。
另一方面,多数插件机制仅支持JavaScript数据到C++数据的转换,对于C语言数据,需要进一步判断和解析。由此,我们需要一种机制,在这种机制下,系统无需判断目标语言是C还是C++,这一切都交由插件程序自己判断,系统传递到插件程序的数据只存在C/C++通用的基本数据类型。
发明内容
为解决已有技术存在的不足,本发明提供了一种基于web操作系统的应用插件通信系统,所述通信系统运行于web应用程序及插件程序之间,且包括通信通道模块和通信数据管理模块,通过通信通道模块和通信数据管理模块实现web应用程序和插件程序之间的数据通信、数据封装及数据解封装;
web应用程序及插件程序通过通信系统实现数据通信时,发送端的数据通过通信通道模块被发送至通信数据管理模块,通信数据管理模块将数据封装为JS:Value类型数据并存储,在插件程序作为发送端而web应用程序作为接收端时,通信系统将封装数据进行解封后传递给web应用,在web应用作为发送端而插件程序作为接收端时,通信系统将数据转换为JS:Value类型数据后再将与该JS:Value类型数据相关的类型值和标识符进行抽象化封装并传递给插件程序,使得通信系统与插件程序之间仅传递数据的类型值和标识符;
通信数据管理模块同时提供数据解封功能,在插件程序需要获取真实的数据内容时,通信数据管理模块将数据解封装以提供给插件程序。
其中,通信系统在web应用程序及插件程序之间传递的数据包括JavaScript原数据以及C/C++原数据;
所述通信通道模块包括同步通信通道模块及异步通信通道模块,以分别实现web应用程序及插件程序之间的同步通信及异步通信,其中,
同步通信通道模块包括同步通信接口和消息监听接口,在一次数据通信过程中,消息监听接口由数据的接收端注册,同步通信通道模块在一次数据通信过程中所涉及的工作步骤包括:
步骤S11:由消息接收端注册消息监听接口;
步骤S12:接收数据并将数据发送至通信数据管理模块进行封装或解封装;
步骤S13:通过同步通信接口将解封装后的原数据或封装后的数据的类型值和标识符发送给接收端的消息监听接口;
步骤S14:等待事件处理:通信系统阻塞发送端进程,等待接收端对数据的处理;
步骤S15:消息回传:接收端在完成对数据的处理后,将处理结果通过同步通信通道回传至发送端;
同步通信接口包括封装JavaScript的同步通信接口和封装C/C++的同步通信接口,消息监听接口也包括管理JavaScript的消息监听接口和管理C/C++的消息监听接口,以分别实现JavaScript原数据以及C/C++原数据在通信系统中的通信;
异步通信通道模块包括异步通信接口和消息监听接口,在一次数据通信过程中,消息监听接口由数据的接收端注册,异步通信通道模块在一次数据通信过程中所涉及的工作步骤包括:
步骤S21:把数据将要发送到的指定线程对象作为一种特殊的线程数据,并对其封装;
步骤S22:由消息接收端注册消息监听接口,在注册消息监听接口的同时,把步骤S21涉及到的封装的线程数据作为另一个参数一起注册;
步骤S23:将所注册的线程数据解封装,并解析为web操作系统可识别调用的线程对象,同时与注册的消息监听接口绑定;
步骤S24:接收数据并将数据发送至通信数据管理模块进行封装或解封装;
步骤S25:通过异步通信接口将解封装后的原数据或封装后的数据的类型值和标识符发送给接收端指定线程的消息监听接口。在接收端处理数据时,发送端正常处理其它事情,待接收端处理完成数据后,可选择将结果通过异步通信通道发送至发送端,或者选择不发送结果;
异步通信接口包括封装JavaScript的异步通信接口和封装C/C++的异步通信接口,消息监听接口也包括管理JavaScript的消息监听接口和管理C/C++的消息监听接口,以分别实现JavaScript原数据以及C/C++原数据在通信系统中的通信。
其中,所述通信数据管理模块包括数据转换模块、数据存储模块及数据管理模块,其中,
数据转换模块用于实现JavaScript原数据以及C/C++原数据的封装、解封装,以及识别封装后的数据的类型值和标识符;
数据存储模块用于将通信数据与插件实例进行绑定存储;
数据管理模块用于管理数据存储模块中所存储的数据。
其中,数据管理模块对数据存储模块中所存储的数据所实现的管理模式包括单个数据管理及插件实例数据管理,其中,
单个数据管理是指:管理数据的内存申请和释放,并通过引用计数管理单个数据生命周期;
插件实例数据管理是指:插件实例销毁时释放插件实例所对应的所有数据内存。
其中,数据转换模块中,通过如下步骤实现对JavaScript原数据的封装:
步骤S31,转换JavaScript原数据:将JavaScript原数据转换为web操作系统引擎可识别的JS:Value类型数据;
步骤S32,构造类型数据对象:根据JavaScript原数据的数据类型进行对象构造;将所述步骤S31转换后的JS:Value类型数据作为类型数据对象的成员变量保存在对象中,得到类型数据对象;
步骤S33,生成唯一标识符:根据所述步骤S32生成的类型数据对象,生成唯一标识符;
步骤S34,保存类型数据对象:以所述步骤S33生成的唯一标识符为索引,将类型数据对象指针强转为父类指针并与插件实例绑定存储到通信系统的数据存储模块中;
步骤S35,封装数据:封装数据结构包括type和id两个成员变量,用type标识JavaScript原数据的数据类型,然后将所述步骤S33生成的唯一标识符写入id中,完成JavaScript原数据的封装。
其中,数据转换模块中,C/C++原数据的封装包括基本数据类型数据封装及复杂数据类型数据封装,其中,基本数据类型数据封装通过如下步骤实现:
步骤S41,转换C/C++原数据:插件程序传入C/C++原数据通过调用通信系统数据转换模块提供原数据类型转换接口将C/C++原数据转换为目标类型的JS:Value类型数据;
步骤S42,构造类型数据对象:将所述步骤S41的JS:Value类型数据作为类型数据对象的成员变量保存在对象中,得到类型数据对象;
步骤S43,生成唯一标识符:根据所述步骤S42生成的类型数据对象,生成唯一标识符;
步骤S44,保存类型数据对象:以所述步骤S43生成的唯一标识符为索引,将类型数据对象指针强转为父类指针并与插件实例绑定存储到通信系统的数据存储模块中;
步骤S45,封装数据:封装数据结构包括type和id两个成员变量,用type标识目标数据类型,然后将所述步骤S43生成的唯一标识符写入id中,完成C/C++基本数据类型数据封装。
其中,数据转换模块中,C/C++原数据的封装包括基本数据类型数据封装及复杂数据类型数据封装,其中,复杂数据类型数据封装通过如下步骤实现:
步骤S51,获取类型数据对象:如果插件程序通过通信系统封装新的复杂数据类型数据,则根据复杂数据类型进行类型数据对象构造,然后创建一个空值的复杂数据类型的原JS:Value类型数据作为类型数据对象的成员变量;如果插件程序通过通信系统向已存在的复杂数据类型数据插入新的元素,则解析传入的复杂数据类型数据的封装数据,通过id从所述应用插件通信系统数据存储模块中取出对应的类型数据对象;
步骤S52,数据转换:将插件程序传入的需组合到复杂数据类型数据中的元素数据通过数据转换模块提供的原数据类型转换接口转换得到JS:Value类型数据;其中,C/C++原数据作为元素数据时,直接将其转换为JS:Value类型数据,封装数据作为元素数据时,通过解封得到JS:Value类型数据;
步骤S53,数据组合:取得所述步骤S51获取的类型数据对象的原JS:Value类型数据,将所述步骤S52转换得到的元素数据的JS:Value类型数据按程序需求组合到原JS:Value类型数据中,完成对复杂数据类型数据的封装。
其中,数据转换模块中,通过如下步骤完成数据解封,以实现web应用程序对封装数据的读取:
步骤S61,解析封装数据:由数据转换模块传入封装数据,解析数据的type和id;
步骤S62,获取类型数据对象:根据所述步骤S61解析出的id,从数据存储模块中获取对应保存的类型数据对象;
步骤S63,获取JS:Value类型数据:根据所述步骤S61解析出的type信息,将所述步骤S62获取的类型数据对象强转为对应的子类对象,并从子类对象中获取到所需的JS:Value类型数据;
步骤S64,获取JavaScript原数据:将获取的JS:Value类型数据转换为JavaScript原数据。
其中,数据转换模块中,通过如下步骤完成数据解封,以实现插件程序对封装数据的读取:
步骤S71,解析封装数据:由数据转换模块传入封装数据,解析数据的type和id;
步骤S72,获取类型数据对象:根据所述步骤S71解析出的id,从数据存储模块中获取对应保存的类型数据对象;
步骤S73:获取JS:Value类型数据:根据所述步骤S71解析出的type信息,将所述步骤S72获取的类型数据对象强转为对应的子类对象,并从子类对象中获取到所需的JS:Value类型数据;
步骤S74:获取C/C++原数据:将所述步骤S73获取的JS:Value类型数据转换为C/C++原数据。
其中,所述步骤S74中,首先判断JS:Value类型数据的类型是否为基本数据类型数据,如果是,通过获取基本数据类型数据方法获取C/C++原数据,如果不是,递归使用获取复杂数据类型数据方法,直至获取到基本数据类型的JS:Value类型数据,再将获取到的基本数据类型的JS:Value类型数据转换为C/C++原数据。
本发明提供的基于web操作系统的应用插件通信系统,通过对通信的数据进行封装,保证了C语言插件对通信数据的可读性;抽象化具体的数据信息,避免过载。同时,提供双向的同步和异步通信方法,使得应用插件通信更准确、更高效。
附图说明
图1:本发明的基于web操作系统的应用插件通信系统的系统架构图。
图2:本发明的基于web操作系统的应用插件通信系统所涉及的web应用程序和插件应用程序的数据结构图。
图3:本发明的基于web操作系统的应用插件通信系统的通信原理图。
具体实施方式
为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
如图2所示,左侧为web程序所传递的JavaScript原数据所涉及的数据类型,如Undefined、Null、Boolean、Number、String、Array、ArrayBuffer、Object,右侧为插件程序所传递的C/C++数据所涉及的数据类型,如Null、int32_t、double、char、char16_t,在二者进行数据交互时,需要经过通信系统将数据转换为二者均可识别的数据类型,如VARTYPE_UNDEFINED、VARTYPE_NULL、VARTYPE_BOOL、VARTYPE_INT32、VARTYPE_DOUBLE、VARTYPE_STRING、VARTYPE_ARRAY、VARTYPE_ARRAY_BUFFER、VARTYPE_OBJECT。
在此基础上,为了解决已有技术存在的不足,本发明的整体技术构思在于提出一种基于web操作系统的应用插件通信方法和系统,该应用插件通信方法和系统通过数据封装技术将JavaScript原数据以及C/C++原数据进行封装存储,将JavaScript原数据以及C/C++原数据均转换为JS:Value类型数据后进行封装,对于web应用,基于IDL的通信接口可以直接将JS:Value类型数据转换为JavaScript原数据,而插件程序则需要读取进一步抽象化封装的数据(或者说转换后的JS:Value类型数据的标识符和类型值),待其需要读取真实数据时,插件程序向通信系统传递类型值和标识符,通信系统根据类型值和标识符读取封装数据并将封装数据解封为C/C++原数据给予插件程序。由此,在通信系统与插件程序间仅传递数据的类型值和标识符,当插件程序需要获取真实的数据内容时,通过通信系统的数据转换模块解封装实际的数据内容,使得JavaScript语言的任意数据类型的通信数据都可以在web应用与插件间进行传递。对于一些复杂的JavaScript数据类型,例如Array、Object等数据类型,本质上是多个、多种基本数据类型数据组合而成的数据结构,可通过通信系统的数据转换模块,获取到复杂数据类型数据对应位置的元素,该元素或是基本数据类型数据,或是复杂数据类型数据,针对复杂数据类型数据可通过递归调用数据转换接口,最终获取到基本数据类型数据,使得从web应用传递到插件程序的数据类型只存在C语言基本数据类型,提高了应用插件通信的灵活性。对数据进行封装,保证了C语言插件对通信数据的可读性;抽象化具体的数据信息,避免过载。同时,提供双向的同步和异步通信方法,使得应用插件通信更准确、更高效。
图1为本发明的基于web操作系统的应用插件通信系统的系统架构图,图3为本发明的基于web操作系统的应用插件通信系统的通信原理图,如图1及图3所示,本发明的通信系统包括通信通道模块及通信数据管理模块。
一、针对通信通道模块
以web应用程序作为发送端,插件程序作为接收端为例:web应用向通信通道模块发送某个类型的数据,通信通道将JavaScript原数据交由数据转换模块进行转换和封装,转换后的数据通过数据存储模块与插件实例进行绑定存储,封装的类型数据则返回到通信通道模块进行转发。如果web应用通过同步通信通道模块进行通信,封装的类型数据将被转发至插件程序的消息监听接口,同时阻塞web应用进程,等待插件处理消息数据后进行事件消息回传。如果web应用通过异步通信通道模块进行通信,封装的类型数据将被转发至插件程序注册异步消息监听接口时指定线程的异步消息监听接口,异步数据的发送不会阻塞web应用进程,插件程序处理消息数据的同时,web应用可以继续进行其他的事情,当插件程序处理完成消息数据后,可选择将结果通过同步/异步通信通道发送至发送端,或者选择不发送结果。反之,插件程序通过通道模块向web应用发送数据的流程大致相同,只是发送的数据需要提前进行封装处理。
具体而言,web应用在发送数据时,系统会自动将JavaScript原数据转换为JS:Value类型数据,然后封装后发送到插件程序,但是反之插件程序发送数据之前,是需要先主动调用数据转换接口,将C/C++原数据进行转换和封装的,前文提到“通信系统与插件程序之间仅传递数据的类型值和标识符”,与此处对应。完整的插件程序通信流程:插件程序调用数据转换接口对C/C++原数据进行转换和封装,获取到封装数据,也就是type和id,然后插件程序调用通信接口将封装数据进行发送,通信系统拿到这个封装数据后,进行解封装,取得JS:Value类型数据,再将这个JS:Value类型数据转换成JavaScript原数据转发到web应用。
这么设计的原因是,通信系统只给发送端提供一个同步通信接口和一个异步通信接口,我们不会根据发送端要发送的数据类型去定义多个不同数据类型的通信接口,JavaScript语言一大特点是,它可以不用强调参数的数据类型,可以实现将任意数据类型的数据直接通过一个接口传入,我们在通信系统中通过web操作系统提供的一些接口再对这些数据的数据类型进行识别就可以,但是C/C++语言并没有这个能力,它必须要强调参数的类型,所以,为了方便,我们只提供以封装数据为参数的通信接口,也就是要求插件程序需要先将数据进行封装处理。
具体的,同步通信方法,包括如下步骤,其中,当web应用程序作为消息的发送端时,插件程序作为接收端接收消息;当插件程序作为消息的发送端时,web应用程序作为接收端接收消息:
步骤一,注册消息监听接口。当web应用程序作为消息的发送端时,为插件程序注册消息监听接口;当插件程序作为消息的发送端时,为web应用程序注册消息监听接口。在一次程序执行过程中,一个接收端可以只注册一次消息监听接口,后续重复使用该监听接口;也可以重复进行注册,覆盖先前的监听接口。
步骤二,传入数据:当web应用程序作为消息的发送端时,调用所述通信通道模块封装的同步通信接口传入JavaScript原数据作为消息数据;当插件程序作为消息的发送端时,调用所述通信通道模块封装的同步通信接口传入封装数据作为消息数据。
步骤三,转换数据:通信系统通过所述通信数据管理模块对所述步骤二传入的数据进行处理,其中,对web应用程序传入的JavaScript原数据进行封装(以便发送给插件程序封装后的类型值和标识符,下文详述),对封装数据进行解封装(以便发送给web应用程序解封装后的JS:Value类型数据,下文详述)。
步骤四,转发数据:通信系统将所述步骤三转换得到的数据转发至接收端的消息监听接口。如果接收端未注册消息监听接口,消息数据将被通信系统丢弃。
步骤五,等待事件处理:通信系统将阻塞发送端进程,等待接收端对消息数据的处理。
步骤六,消息回传:接收端在完成对消息数据的处理后,将处理结果通过通道回传至消息发送端。
与之对应的,异步通信方法,包括以下步骤,其中,当web应用作为消息的发送端时,插件程序作为接收端接收消息;当插件程序作为消息的发送端时,web应用作为接收端接收消息:
步骤一,注册消息监听接口:当web应用作为消息的发送端时,为插件程序注册消息监听接口;当插件程序作为消息的发送端时,为web应用注册消息监听接口。在一次程序执行过程中,可以只注册一次消息监听接口,后续重复使用该监听接口;也可以重复进行注册,覆盖先前的监听接口。把消息数据将要被发送到的指定线程对象作为一种特殊数据,通过数据封装方法进行封装,然后在注册消息监听接口的同时,把线程数据作为另一个参数一并进行注册。
步骤二,处理线程:通信系统将所述步骤一注册的线程数据进行解封装,并解析为web操作系统(此web操作系统指本发明的完整的应用插件通信系统所处的操作系统)可识别调用的线程对象,并与注册的消息监听接口绑定。
步骤三,传入数据:当web应用程序作为消息的发送端时,调用所述通信通道模块封装的异步通信接口传入JavaScript原数据作为消息数据;当插件程序作为消息的发送端时,调用所述通信通道模块封装的异步通信接口传入封装数据作为消息数据。
步骤四,转换数据:通信系统通过所述通信数据管理模块对所述步骤三传入的数据进行处理,其中,对web应用程序传入的JavaScript原数据进行封装(以便发送给插件程序封装后的类型值和标识符,下文详述),对封装数据进行解封装(以便发送给web应用程序解封装后的JS:Value类型数据,下文详述)。
步骤五,转发数据:通信系统将所述步骤四转换得到的数据发送至指定线程的消息监听接口。此过程不会阻塞发送端程序进程,在接收端处理消息数据的同时,发送端可以继续进行其他的事情,当接收端处理完成消息数据后,可选择将结果通过同步/异步通信通道发送至发送端,或者选择不发送结果。
为了适应JavaScript/C/C++原数据的通信,同步通信接口包括封装JavaScript的同步通信接口和封装C/C++的同步通信接口,消息监听接口也包括管理JavaScript的消息监听接口和管理C/C++的消息监听接口;与之对应的,异步通信接口包括封装JavaScript的异步通信接口和封装C/C++的异步通信接口,消息监听接口也包括管理JavaScript的消息监听接口和管理C/C++的消息监听接口。
二、针对通信数据管理模块
请继续参阅图1所示,通信数据管理模块包括数据转换模块、数据存储模块及数据管理模块。
数据转换模块提供数据识别和数据转换两种功能。其中:数据识别功能主要涉及解析识别数据类型、标识符信息。主要地,对JavaScript/C/C++原数据的数据类型进行识别;对已经封装过的类型数据的类型、标识符进行识别。数据转换功能涉及原数据类型转换、数据封装及数据解封装,原数据类型转换的功能服务于数据封装和数据解封装的过程,数据封装和数据解封装的过程将于下文详述。
数据存储模块用于在数据的处理过程中,将JavaScript/C/C++原数据经过数据转换模块转换后得到的JS:Value类型数据存储在通信系统中,通信数据与插件实例均存在唯一标识符,且互为索引,在通信系统中既可通过数据信息获取所在插件实例对象,也可通过插件实例信息获取该实例所有数据对象。对数据进行存储的目的,一方面是避免过载:庞大的数据不能一直作为参数在通信系统中反复传递,这会造成系统的压力,将原数据存储一份在系统中,用仅带有数据类型和标识符的封装数据替代原数据进行转发,需要数据内容时,随取随用,能降低系统的压力;另一方面,在系统中,可能同时存在多个插件实例,通过数据与插件实例绑定存储可以更准确地区分每个数据,防止数据混淆;与插件实例的绑定也保证了在插件实例销毁时,与其绑定的数据都统一销毁,避免内存占用。
数据管理模块用于对数据的生命周期进行管理,这样可以区分同个web应用下不同插件实例间的数据,避免混淆;数据管理模块提供单个数据管理功能和插件实例数据管理功能。
单个数据管理定义为:管理数据的内存申请和释放,并通过引用计数管理单个数据生命周期。一般由插件程序进行控制。插件程序通过数据管理模块提供的接口,按需求对特定的数据进行内存的申请或者释放;对数据的复制或销毁,则通过增加或减少数据的引用计数来实现。被销毁的数据默认被释放内存,将从数据存储模块中与插件实例解除绑定并释放存储,避免数据在使用过程中突然被释放等问题。
插件实例数据管理定义为:插件实例销毁时释放所有实例数据内存。由通信系统进行控制。每个数据在通信系统中进行存储时都会与一个插件实例进行绑定,在检测到插件实例进行销毁操作时,通信系统将通过数据存储模块获取所有与该实例绑定的数据,进行集中的销毁释放,避免内存占用等问题。
三、数据封装方法
1、JavaScript原数据封装方法
步骤一,转换JavaScript原数据:JavaScript原数据转换为web操作系统引擎可识别的JS:Value类型数据;
步骤二,构造类型数据对象:根据JavaScript原数据的数据类型进行对象构造;将所述步骤一的JS:Value类型数据作为类型数据对象的成员变量保存在对象中。各个类型的数据类均由同一个父类派生,所有类型数据对象都保持一定的特性相同;
步骤三,生成唯一标识符:根据所述步骤二生成的类型数据对象,生成唯一标识符;
步骤四,保存类型数据对象:以所述步骤三生成的唯一标识符为索引,将类型数据对象指针强转为父类指针并与插件实例绑定存储到所述应用插件通信系统的数据存储模块中;
步骤五,封装数据:封装数据结构包括type和id两个成员变量。用type标识JavaScript原数据的数据类型,然后将所述步骤三生成的唯一标识符写入id中,完成JavaScript原数据的封装。
2、所述C/C++原数据的封装方法
包括基本数据类型数据封装方法和复杂数据类型数据封装方法。
基本数据类型数据封装方法包括:
步骤A1,转换C/C++原数据:所述应用插件通信系统数据转换模块提供原数据类型转换接口,插件程序期望将C/C++原数据以何种JavaScript数据类型为目标数据类型进行数据转换,就调用对应的原数据类型转换接口,并传入指定类型的C/C++原数据,所述原数据类型转换模块将C/C++原数据转换为目标数据类型的JS:Value类型数据;
步骤A2,构造类型数据对象:根据目标数据类型进行对象构造;将所述步骤A1的JS:Value类型数据作为类型数据对象的成员变量保存在对象中。各个类型的数据类均由同一个父类派生,所有类型数据对象都保持一定的特性相同;
步骤A3,生成唯一标识符:根据所述步骤A2生成的类型数据对象,生成系统唯一标识符;
步骤A4,保存类型数据对象:以所述步骤A3生成的唯一标识符为索引,将类型数据对象指针强转为父类指针并与插件实例绑定存储到所述应用插件通信系统的数据存储模块中;
步骤A5,封装数据:封装数据结构包括type和id两个成员变量。用type标识目标数据类型,然后将所述步骤A3生成的唯一标识符写入id中,完成C/C++基本数据类型数据封装。
复杂数据类型数据封装方法包括:
步骤B1,获取类型数据对象:所述应用插件通信系统数据转换模块提供原数据类型转换接口,插件程序期望将C/C++原数据以何种JavaScript数据类型为目标数据类型进行数据转换,就调用对应的原数据类型转换接口。如果插件程序通过所述应用插件通信系统封装新的复杂数据类型数据,则根据复杂数据类型进行类型数据对象构造,同时,创建一个空值的目标类型的原JS:Value类型数据作为类型数据对象的成员变量;如果插件程序通过所述应用插件通信系统向已存在的复杂数据类型数据插入新的元素,则解析传入的复杂数据类型数据,通过id从所述应用插件通信系统数据存储模块中取出对应的类型数据对象;
以积木为例:第一种情况相当于拿着第一块积木准备搭建,第二种情况则是积木已经搭建了一部分,拿着另一块积木准备组合到这部分积木中。
步骤B2,数据转换:将插件程序传入的需组合到复杂数据类型数据中的元素数据通过数据转换模块提供的原数据类型转换接口转换得到JS:Value类型数据;所述C/C++原数据的封装方法面向插件程序提供两套数据传入接口,一套以C/C++原数据为传入参数,由所述应用插件通信系统的数据转换模块的原类型数据转换模块将C/C++原数据转换为JS:Value类型数据;一套以基于所述数据封装方法封装过的封装数据为传入参数,由所述应用插件通信系统的数据转换模块的数据解封装模块,解封装得到封装数据的JS:Value类型数据。
仍以积木为例,“以C/C++原数据为传入参数”,相当于即将要对其进行搭建的积木是一个单独的积木部件,“以基于所述数据封装方法封装过的封装数据为传入参数”则相当于即将要搭建的积木是一个半成品(如已经由若干个积木部件搭建好了手或脚等),针对第二种情况,其所传入的参数的封装方法可选自上文提到的基本数据类型数据封装或复杂数据类型数据封装,也即,传入的本身是封装过的数据,此时,则需要将封装的数据进行解封装,得到JS:Value类型数据(解封方法下文详述)。
步骤B3,数据组合:取得所述步骤B1获取的类型数据对象的原JS:Value类型数据,将所述步骤B2转换得到的JS:Value类型数据按程序需求组合到原JS:Value类型数据中,完成对复杂数据类型数据的封装。
四、数据解封方法
1、web应用程序对封装数据的读取方法,包括以下步骤:
步骤一,解析封装数据:使用所述应用插件通信系统提供的数据转换模块,传入封装数据,所述应用插件通信系统解析数据的type和id;
步骤二,获取类型数据对象:根据所述步骤一解析出的id,从所述应用插件通信系统中获取对应保存的类型数据对象;
步骤三,获取JS:Value类型数据:根据所述步骤一解析出的type信息,将所述步骤二获取的类型数据对象强转为对应的子类对象,并从子类对象中获取到所需的JS:Value类型数据;
步骤四,获取JavaScript原数据:通过所述应用插件通信系统将所述步骤三获取的JS:Value类型数据转换为JavaScript数据(也即,JS:Value类型数据可以作为一个中间桥梁完成JavaScript原数据和C++原数据的转换,插件程序发送的C++原数据经封装为JS:Value类型数据后,再解封可得到JavaScript原数据,web应用程序发送的JavaScript原数据经封装后再解封也可以得到C++原数据)。
2、插件程序对封装数据的读取方法,包括以下步骤:
步骤一,解析封装数据:使用所述应用插件通信系统提供的数据转换模块,传入封装数据,所述应用插件通信系统解析数据的type和id;
步骤二,获取类型数据对象:根据所述步骤一解析出的id,从所述应用插件通信系统中获取对应保存的类型数据对象;
步骤三,获取JS:Value类型数据:根据所述步骤一解析出的type信息,将所述步骤二获取的类型数据对象强转为对应的子类对象,并从子类对象中获取到所需的JS:Value类型数据;
步骤四,获取C/C++原数据,包括:获取基本数据类型数据方法、获取复杂数据类型数据方法,其中:
获取基本数据类型数据方法,包括:判断type为基本数据类型,通过所述应用插件通信系统的数据转换模块将JS:Value类型数据转换为C/C++原数据,并返回至插件;
获取复杂数据类型数据方法,包括:判断type为复杂数据类型,则要求插件程序提供获取数据的位置信息,比如从Array类型数据中读取数据,需要提供具体的索引信息,然后数据转换模块根据索引取得对应位置的JS:Value类型数据;判断取得的JS:Value类型数据类型是否为基本数据类型,如果是,通过所述获取基本数据类型数据方法获取C/C++原数据,如果不是,可以递归使用获取复杂数据类型数据方法,获取到基本数据类型的C/C++原数据。最终将C/C++原数据返回至插件。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。
Claims (10)
1.基于web操作系统的应用插件通信系统,其特征在于,所述通信系统运行于web应用程序及插件程序之间,且包括通信通道模块和通信数据管理模块,通过通信通道模块和通信数据管理模块实现web应用程序和插件程序之间的数据通信、数据封装及数据解封装;
web应用程序及插件程序通过通信系统实现数据通信时,发送端的数据通过通信通道模块被发送至通信数据管理模块,通信数据管理模块将数据进行封装为JS:Value类型数据并存储,在插件程序作为发送端而web应用程序作为接收端时,通信系统将封装数据进行解封后传递给web应用,在web应用作为发送端而插件程序作为接收端时,通信系统将数据转换为JS:Value类型数据后再将与该JS:Value类型数据相关的类型值和标识符进行抽象化封装并传递给插件程序,使得通信系统与插件程序之间仅传递数据的类型值和标识符;
通信数据管理模块同时提供数据解封功能,在插件程序需要获取真实的数据内容时,通信数据管理模块将数据解封装以提供给插件程序。
2.如权利要求1所述的基于web操作系统的应用插件通信系统,其特征在于,通信系统在web应用程序及插件程序之间传递的数据包括JavaScript原数据以及C/C++原数据;
所述通信通道模块包括同步通信通道模块及异步通信通道模块,以分别实现web应用程序及插件程序之间的同步通信及异步通信,其中,
同步通信通道模块包括同步通信接口和消息监听接口,在一次数据通信过程中,消息监听接口由数据的接收端注册,同步通信通道模块在一次数据通信过程中所涉及的工作步骤包括:
步骤S11:由消息接收端注册消息监听接口;
步骤S12:接收数据并将数据发送至通信数据管理模块进行封装或解封装;
步骤S13:通过同步通信接口将解封装后的原数据或封装后的数据的类型值和标识符发送给接收端的消息监听接口;
步骤S14:等待事件处理:通信系统阻塞发送端进程,等待接收端对数据的处理;
步骤S15:消息回传:接收端在完成对数据的处理后,将处理结果通过同步通信通道回传至发送端;
同步通信接口包括封装JavaScript的同步通信接口和封装C/C++的同步通信接口,消息监听接口也包括管理JavaScript的消息监听接口和管理C/C++的消息监听接口,以分别实现JavaScript原数据以及C/C++原数据在通信系统中的通信;
异步通信通道模块包括异步通信接口和消息监听接口,在一次数据通信过程中,消息监听接口由数据的接收端注册,异步通信通道模块在一次数据通信过程中所涉及的工作步骤包括:
步骤S21:把数据将要发送到的指定线程对象作为一种特殊的线程数据,并对其封装;
步骤S22:由消息接收端注册消息监听接口,在注册消息监听接口的同时,把步骤S21涉及到的封装的线程数据作为另一个参数一起注册;
步骤S23:将所注册的线程数据解封装,并解析为web操作系统可识别调用的线程对象,同时与注册的消息监听接口绑定;
步骤S24:接收数据并将数据发送至通信数据管理模块进行封装或解封装;
步骤S25:通过异步通信接口将解封装后的原数据或封装后的数据的类型值和标识符发送给接收端指定线程的消息监听接口;在接收端处理数据时,发送端正常处理其它事情,待接收端处理完成数据后,可选择将结果通过异步通信通道发送至发送端,或者选择不发送结果;
异步通信接口包括封装JavaScript的异步通信接口和封装C/C++的异步通信接口,消息监听接口也包括管理JavaScript的消息监听接口和管理C/C++的消息监听接口,以分别实现JavaScript原数据以及C/C++原数据在通信系统中的通信。
3.如权利要求1所述的基于web操作系统的应用插件通信系统,其特征在于,所述通信数据管理模块包括数据转换模块、数据存储模块及数据管理模块,其中,
数据转换模块用于实现JavaScript原数据以及C/C++原数据的封装、解封装,以及识别封装后的数据的类型值和标识符;
数据存储模块用于将通信数据与插件实例进行绑定存储;
数据管理模块用于管理数据存储模块中所存储的数据。
4.如权利要求3所述的基于web操作系统的应用插件通信系统,其特征在于,数据管理模块对数据存储模块中所存储的数据所实现的管理模式包括单个数据管理及插件实例数据管理,其中,
单个数据管理是指:管理数据的内存申请和释放,并通过引用计数管理单个数据生命周期;
插件实例数据管理是指:插件实例销毁时释放插件实例所对应的所有数据内存。
5.如权利要求3所述的基于web操作系统的应用插件通信系统,其特征在于,数据转换模块中,通过如下步骤实现对JavaScript原数据的封装:
步骤S31,转换JavaScript原数据:将JavaScript原数据转换为web操作系统引擎可识别的JS:Value类型数据;
步骤S32,构造类型数据对象:根据JavaScript原数据的数据类型进行对象构造;将所述步骤S31转换后的JS:Value类型数据作为类型数据对象的成员变量保存在对象中,得到类型数据对象;
步骤S33,生成唯一标识符:根据所述步骤S32生成的类型数据对象,生成唯一标识符;
步骤S34,保存类型数据对象:以所述步骤S33生成的唯一标识符为索引,将类型数据对象指针强转为父类指针并与插件实例绑定存储到通信系统的数据存储模块中;
步骤S35,封装数据:封装数据结构包括type和id两个成员变量,用type标识JavaScript原数据的数据类型,然后将所述步骤S33生成的唯一标识符写入id中,完成JavaScript原数据的封装。
6.如权利要求3所述的基于web操作系统的应用插件通信系统,其特征在于,数据转换模块中,C/C++原数据的封装包括基本数据类型数据封装及复杂数据类型数据封装,其中,基本数据类型数据封装通过如下步骤实现:
步骤S41,转换C/C++原数据:插件程序传入C/C++原数据通过调用通信系统数据转换模块提供原数据类型转换接口将C/C++原数据转换为目标类型的JS:Value类型数据;
步骤S42,构造类型数据对象:将所述步骤S41的JS:Value类型数据作为类型数据对象的成员变量保存在对象中,得到类型数据对象;
步骤S43,生成唯一标识符:根据所述步骤S42生成的类型数据对象,生成唯一标识符;
步骤S44,保存类型数据对象:以所述步骤S43生成的唯一标识符为索引,将类型数据对象指针强转为父类指针并与插件实例绑定存储到通信系统的数据存储模块中;
步骤S45,封装数据:封装数据结构包括type和id两个成员变量,用type标识目标数据类型,然后将所述步骤S43生成的唯一标识符写入id中,完成C/C++基本数据类型数据封装。
7.如权利要求3所述的基于web操作系统的应用插件通信系统,其特征在于,数据转换模块中,C/C++原数据的封装包括基本数据类型数据封装及复杂数据类型数据封装,其中,复杂数据类型数据封装通过如下步骤实现:
步骤S51,获取类型数据对象:如果插件程序通过通信系统封装新的复杂数据类型数据,则根据复杂数据类型进行类型数据对象构造,然后创建一个空值的复杂数据类型的原JS:Value类型数据作为类型数据对象的成员变量;如果插件程序通过通信系统向已存在的复杂数据类型数据插入新的元素,则解析传入的复杂数据类型数据的封装数据,通过id从所述应用插件通信系统数据存储模块中取出对应的类型数据对象;
步骤S52,数据转换:将插件程序传入的需组合到复杂数据类型数据中的元素数据通过数据转换模块提供的原数据类型转换接口转换得到JS:Value类型数据;其中,C/C++原数据作为元素数据时,直接将其转换为JS:Value类型数据,封装数据作为元素数据时,通过解封得到JS:Value类型数据;
步骤S53,数据组合:取得所述步骤S51获取的类型数据对象的原JS:Value类型数据,将所述步骤S52转换得到的元素数据的JS:Value类型数据按程序需求组合到原JS:Value类型数据中,完成对复杂数据类型数据的封装。
8.如权利要求3所述的基于web操作系统的应用插件通信系统,其特征在于,数据转换模块中,通过如下步骤完成数据解封,以实现web应用程序对封装数据的读取:
步骤S61,解析封装数据:由数据转换模块传入封装数据,解析数据的type和id;
步骤S62,获取类型数据对象:根据所述步骤S61解析出的id,从数据存储模块中获取对应保存的类型数据对象;
步骤S63,获取JS:Value类型数据:根据所述步骤S61解析出的type信息,将所述步骤S62获取的类型数据对象强转为对应的子类对象,并从子类对象中获取到所需的JS:Value类型数据;
步骤S64,获取JavaScript原数据:将获取的JS:Value类型数据转换为JavaScript原数据。
9.如权利要求3所述的基于web操作系统的应用插件通信系统,其特征在于,数据转换模块中,通过如下步骤完成数据解封,以实现插件程序对封装数据的读取:
步骤S71,解析封装数据:由数据转换模块传入封装数据,解析数据的type和id;
步骤S72,获取类型数据对象:根据所述步骤S71解析出的id,从数据存储模块中获取对应保存的类型数据对象;
步骤S73:获取JS:Value类型数据:根据所述步骤S71解析出的type信息,将所述步骤S72获取的类型数据对象强转为对应的子类对象,并从子类对象中获取到所需的JS:Value类型数据;
步骤S74:获取C/C++原数据:将所述步骤S73获取的JS:Value类型数据转换为C/C++原数据。
10.如权利要求9所述的基于web操作系统的应用插件通信系统,其特征在于,
所述步骤S74中,首先判断JS:Value类型数据的类型是否为基本数据类型数据,如果是,通过获取基本数据类型数据方法获取C/C++原数据,如果不是,递归使用获取复杂数据类型数据方法,直至获取到基本数据类型的JS:Value类型数据,再将获取到的基本数据类型的JS:Value类型数据转换为C/C++原数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310322546.8A CN116048668B (zh) | 2023-03-30 | 2023-03-30 | 基于web操作系统的应用插件通信系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310322546.8A CN116048668B (zh) | 2023-03-30 | 2023-03-30 | 基于web操作系统的应用插件通信系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116048668A true CN116048668A (zh) | 2023-05-02 |
CN116048668B CN116048668B (zh) | 2023-06-23 |
Family
ID=86131615
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310322546.8A Active CN116048668B (zh) | 2023-03-30 | 2023-03-30 | 基于web操作系统的应用插件通信系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116048668B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117056173A (zh) * | 2023-10-12 | 2023-11-14 | 麒麟软件有限公司 | 在Web操作系统上监控安卓应用生命周期的方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101437002A (zh) * | 2007-11-16 | 2009-05-20 | 中国移动通信集团公司 | 移动代理服务器系统 |
CN103095762A (zh) * | 2011-11-02 | 2013-05-08 | 腾讯科技(深圳)有限公司 | Web页面跨域通信方法和装置 |
CN103645901A (zh) * | 2013-12-16 | 2014-03-19 | 上海证券交易所 | 一种基于事件链的用户界面插件化交互方法 |
US20140222890A1 (en) * | 2013-02-04 | 2014-08-07 | Oracle International Corporation | Real-time communication signaling gateway |
CN106850399A (zh) * | 2016-12-30 | 2017-06-13 | 深圳市潮流网络技术有限公司 | 一种基于WebRTC技术即时消息的通信方法 |
CN107766119A (zh) * | 2016-08-19 | 2018-03-06 | 阿里巴巴集团控股有限公司 | 一种脚本语言接口的处理方法、装置和设备 |
CN111223540A (zh) * | 2020-01-08 | 2020-06-02 | 智业软件股份有限公司 | 一种本地应用程序嵌合到web应用中的方法及系统 |
-
2023
- 2023-03-30 CN CN202310322546.8A patent/CN116048668B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101437002A (zh) * | 2007-11-16 | 2009-05-20 | 中国移动通信集团公司 | 移动代理服务器系统 |
CN103095762A (zh) * | 2011-11-02 | 2013-05-08 | 腾讯科技(深圳)有限公司 | Web页面跨域通信方法和装置 |
US20140222890A1 (en) * | 2013-02-04 | 2014-08-07 | Oracle International Corporation | Real-time communication signaling gateway |
CN103645901A (zh) * | 2013-12-16 | 2014-03-19 | 上海证券交易所 | 一种基于事件链的用户界面插件化交互方法 |
CN107766119A (zh) * | 2016-08-19 | 2018-03-06 | 阿里巴巴集团控股有限公司 | 一种脚本语言接口的处理方法、装置和设备 |
CN106850399A (zh) * | 2016-12-30 | 2017-06-13 | 深圳市潮流网络技术有限公司 | 一种基于WebRTC技术即时消息的通信方法 |
CN111223540A (zh) * | 2020-01-08 | 2020-06-02 | 智业软件股份有限公司 | 一种本地应用程序嵌合到web应用中的方法及系统 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117056173A (zh) * | 2023-10-12 | 2023-11-14 | 麒麟软件有限公司 | 在Web操作系统上监控安卓应用生命周期的方法 |
CN117056173B (zh) * | 2023-10-12 | 2024-01-30 | 麒麟软件有限公司 | 在Web操作系统上监控安卓应用生命周期的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN116048668B (zh) | 2023-06-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5067104A (en) | Programmable protocol engine having context free and context dependent processes | |
CN116048668B (zh) | 基于web操作系统的应用插件通信系统 | |
CN110381093B (zh) | 数据协议转换的方法、装置、数据传输的系统及电子设备 | |
US20090234971A1 (en) | Encoding/decoding while allowing varying message formats per message | |
CN109861998B (zh) | 一种基于北斗短报文协议的插件式动态解析系统及方法 | |
CN114115841A (zh) | 数据流接口动态编排方法、装置、设备、介质及程序产品 | |
CN113296979A (zh) | 一种虚幻引擎与外部程序的数据通信方法 | |
CN112966478A (zh) | 表格数据的格式转换方法、装置及存储介质 | |
US20020143857A1 (en) | Method and system for event communication on a distributed scanner/workstation platform | |
CN101404656A (zh) | 一种与第三方智能设备协议通讯的软件接口设计方法 | |
CN102752238A (zh) | 一种通用网关设备以及物联网系统 | |
CN111104119A (zh) | 用于存储器中心型计算机的mpi程序转换方法及装置 | |
JP2023021137A (ja) | ソフトウェア実体間のイベントの決定的再現 | |
WO2022261810A1 (zh) | 数据获取系统的构建方法及装置 | |
CN113312394B (zh) | 数据获取系统的构建方法及装置 | |
CN102208998A (zh) | 基于fpga的corba通信装置 | |
CN109814501B (zh) | 一种现场检测设备灵活接入的信息采集系统及方法 | |
CN113835904A (zh) | 一种远程过程调用控制方法、装置、设备及存储介质 | |
CN116506526B (zh) | 基于可配置协议解析器的卫星数据处理方法及系统 | |
JPH01106573A (ja) | データ通信装置 | |
Gray et al. | Pluggability issues in the multi protocol | |
CN117240934B (zh) | 一种基于帧处理的异类信号转换系统 | |
KR102126896B1 (ko) | 메모리 중심 컴퓨터를 위한 mpi 프로그램 변환 방법 및 장치 | |
CN114125032B (zh) | 一种边缘协议数据处理方法和系统 | |
CN113032010B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |