首页> 中国专利> 远程函数调用的处理方法、装置、电子设备及存储介质

远程函数调用的处理方法、装置、电子设备及存储介质

摘要

本发明提供了一种远程函数调用的处理方法、装置、电子设备及存储介质,所述方法包括:通过客户端从服务器获取远程函数;响应于在所述客户端中执行所述远程函数的客户端代码,通过所述远程函数中封装的接口函数,执行所述获取的远程函数中封装的逻辑代码,以及将执行得到的调用结果返回所述客户端代码;响应于在服务器中执行所述远程函数的客户端代码,通过所述远程函数中封装的接口函数,向服务器发送调用远程函数的网络请求,以及将所述服务器返回的调用结果返回所述客户端代码。

著录项

  • 公开/公告号CN112395096A

    专利类型发明专利

  • 公开/公告日2021-02-23

    原文格式PDF

  • 申请/专利权人 腾讯科技(深圳)有限公司;

    申请/专利号CN201910746090.1

  • 申请日2019-08-13

  • 分类号G06F9/54(20060101);

  • 代理机构11270 北京派特恩知识产权代理有限公司;

  • 代理人王姗姗;张颖玲

  • 地址 518000 广东省深圳市南山区高新区科技中一路腾讯大厦35层

  • 入库时间 2023-06-19 09:57:26

说明书

技术领域

本发明涉及通信技术领域,特别涉及一种远程函数调用的处理方法、装置、电子设备及存储介质。

背景技术

目前各大厂商推出具有云函数功能的云计算平台,利用云函数可以无需购买和管理服务器,而只需使用平台支持的语言编写核心代码并设置代码运行的条件,代码即可在云基础设施上弹性、安全地运行。底层计算资源,包括服务器CPU、内存、网络和其他配置/资源维护、代码部署、弹性伸缩、负载均衡等被托管,这些云函数侧重于简化后台服务。

目前基于云计算平台,客户端只能通过调用网络服务的方式显式地调用相关代码,对客户端而言,这些函数仍然是后台服务的范畴,客户端调用时仍然根据这些云函数的规则来调用云函数,仍然需要和这些云函数进行调试等。并且,目前移动客户端代码只能在安卓设备或者苹果设备上运行。代码运行的具体流程是移动设备将应用下载并安装之后,然后运行应用中的代码。

发明内容

本发明实施例提供一种远程函数调用的处理方法、装置、电子设备及存储介质,能够使客户端运行的代码在远程服务器上执行且客户端能够像调用本地代码一样调用远程代码。

本发明实施例的技术方案是这样实现的:

本发明实施例提供一种远程函数调用的处理方法,包括:

通过客户端从服务器获取远程函数;

响应于在所述客户端中执行所述远程函数的客户端代码,通过所述远程函数中封装的接口函数,执行所述获取的远程函数中封装的逻辑代码,以及

将执行得到的调用结果返回所述客户端代码;

响应于在服务器中执行所述远程函数的客户端代码,通过所述远程函数中封装的接口函数,向所述服务器发送调用远程函数的网络请求,以及

将所述服务器返回的调用结果返回所述客户端代码。

上述方案中,所述方法还包括:

接收来自于所述客户端的针对于所述逻辑代码的更新,根据所述更新的逻辑代码创建更新的远程函数,并移除所述远程函数。

本发明实施例提供一种远程函数调用的处理方法,包括:

响应于客户端接收到逻辑代码的操作,通过所述客户端在所述逻辑代码中插入接口代码以得到代码文件,并通过所述客户端对所述逻辑代码进行扫描,以生成对应于所述逻辑代码的配置文件;

响应于服务器接收到所述代码文件和所述配置文件,通过所述服务器对代码文件进行编译生成适配于远程函数规范的压缩文件,按照所述配置文件对所述压缩文件进行命名;

通过调用服务器中用于创建远程函数的应用程序编程接口,将所述压缩文件创建为封装有所述逻辑代码的远程函数,所述远程函数中封装有对应于接口代码的接口函数,并在所述服务器中部署所述远程函数。

本发明实施例提供一种远程函数调用的处理装置,所述装置包括:

函数获取模块,用于通过客户端从服务器获取远程函数;

本地执行模块,用于响应于在所述客户端中执行所述远程函数的客户端代码,通过所述远程函数中封装的接口函数,执行所述获取的远程函数中封装的逻辑代码,以及将执行得到的调用结果返回所述客户端代码;

远程执行模块,响应于在服务器中执行所述远程函数的客户端代码,通过所述远程函数中封装的接口函数,向服务器发送调用远程函数的网络请求,以及将所述服务器返回的调用结果返回所述客户端代码。

上述方案中,所述装置还包括:

鉴权模块,用于在执行所述获取的远程函数中封装的逻辑代码之前,获取所述客户端代码中携带的表征客户端身份信息的标识;根据所述标识,通过所述远程函数对所述客户端进行鉴权处理,并确定鉴权通过。

上述方案中,所述鉴权模块,还用于:

在向服务器发送调用远程函数的网络请求之前,获取所述客户端代码中携带的表征客户端身份信息的标识;根据所述标识,通过所述远程函数对所述客户端进行鉴权处理,并确定鉴权通过。

上述方案中,所述装置还包括:

模式选择模块,用于当客户端运行的网络环境的网络质量参数低于网络质量阈值时,确定在所述客户端中执行所述远程函数的客户端代码;当客户端运行的网络环境的网络质量参数不低于网络质量阈值时,确定在所述服务器中执行所述远程函数的客户端代码。

上述方案中,所述装置还包括:

远程函数部署模块,用于响应于所述客户端接收到所述逻辑代码的操作,通过所述客户端对所述逻辑代码进行预处理得到代码文件和配置文件,并发送给所述服务器,以使

所述服务器对代码文件进行编译生成适配于远程函数规范的压缩文件,按照所述配置文件对所述压缩文件进行命名;

所述远程函数部署模块,还用于通过调用服务器中用于创建远程函数的应用程序编程接口,将所述压缩文件创建为封装有所述逻辑代码的远程函数,并在所述服务器中部署所述远程函数。

本发明实施例提供一种远程函数调用的处理装置,所述装置包括:

远程函数配置模块,用于响应于客户端接收到逻辑代码的操作,通过所述客户端在所述逻辑代码中插入接口代码以得到代码文件,并通过所述客户端对所述逻辑代码进行扫描,以生成对应于所述逻辑代码的配置文件;

远程函数编译模块,用于响应于服务器接收到所述代码文件和所述配置文件,通过所述服务器对代码文件进行编译生成适配于远程函数规范的压缩文件,按照所述配置文件对所述压缩文件进行命名;

远程函数创建模块,用于通过调用服务器中用于创建远程函数的应用程序编程接口,将所述压缩文件创建为封装有所述逻辑代码的远程函数,所述远程函数中封装有对应于接口代码的接口函数,并在所述服务器中部署所述远程函数。

在上述方案中,所述远程函数配置模块还用于:

查找所述逻辑代码;

当查找到标记为远程函数的逻辑代码时,在所述逻辑代码中插入鉴权代码和接口代码,并记录所述逻辑代码的类名和方法名至所述配置文件,以得到所述代码文件和所述配置文件。

在上述方案中,所述远程函数配置模块还用于:

通过字节码编辑方式在所述逻辑代码中加入所述接口代码,所述接口代码包括通过网络请求调用远程函数的接口代码和通过进程间通信机制在所述客户端执行所述远程函数的接口代码。

在上述方案中,所述装置还包括:

远程函数管理模块,用于接收来自于所述客户端的针对于所述逻辑代码的更新,根据所述更新的逻辑代码创建更新的远程函数,并移除所述远程函数。

本发明实施例提供一种电子设备,包括:

存储器,用于存储可执行指令;

处理器,用于执行所述存储器中存储的可执行指令时,实现本发明实施例提供的远程函数调用的处理方法。

本发明实施例提供一种存储介质,存储有可执行指令,用于引起处理器执行时,实现本发明实施例提供的远程函数调用的处理方法。

本发明实施例具有以下有益效果:

通过把原本只能在本地执行的逻辑代码放在远程服务器上执行,通过调用接口函数实现本地调用远程执行的逻辑代码,在业务多变的场景下,可以使得在客户端开发过程中迅速修改逻辑代码并上线功能,同时由于逻辑代码仍然可以在本地执行,因而开发者具有本地调试能力。

附图说明

图1是本发明实施例提供的远程函数调用的处理系统100的一个可选的架构示意图;

图2是本发明实施例提供的电子设备400的一个可选的结构示意图;

图3A-3D是本发明实施例提供的远程函数调用的处理方法的可选的流程示意图;

图4A-4D是本发明实施例提供的远程函数调用的处理方法的可选的流程示意图;

图5是本发明实施例提供的客户端编译功能示意图;

图6是本发明实际应用中的远程函数的开发、集成、创建以及部署过程的时序图;

图7是本发明实际应用中的实现远程函数调用的示意图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,所描述的实施例不应视为对本发明的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。

对本发明实施例进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。

1)进程间通信(IPC,Inter-Process Communication),也称为跨进程通信,是指两个进程之间进行数据交换的过程。

2)超文本传输协议(HTTP,HyperText Transfer Protocol)请求:客户端到服务器端的请求消息。

3)封装:即隐藏对象的属性和实现细节,仅对外公开接口。

4)远程函数:预先部署到服务器上的用于实现特殊功能的函数,例如实现监听功能的监听函数或是用于发送消息的消息函数。

5)客户端代码:即客户端中用于实现客户端中的功能(例如查询、显示等功能)的代码,代码可以选择在客户端本地执行远程函数还是在服务器中执行远程函数。

6)逻辑代码:封装在远程函数中用于实现远程函数的功能的代码,例如用于实现监听函数监听功能的代码或是用于实现消息函数发送消息功能的代码。

目前云计算平台推出的云函数主要是针对后台功能进行开发,客户端只能通过调用超文本传输协议服务的方式来显式地调用这些代码。对客户端而言,这些函数仍然是后台服务。客户端调用时仍然根据这些远程函数的规则来调用远程函数,仍然需要和这些远程函数进行调试等。

为了扩展客户端开发能力,让客户端运行的代码能够在远程后台上运行。客户端可以向调用其他本地代码一样调用在客户端开发的远程代码,而不需要根据额外的远程函数规则调用。客户端可以在本地调试这些代码,而不需要像其他传统后台服务那样进行调试。

现有技术中的远程函数是对后台开发的简化,或者说是对通用语言开发的支持,客户端开发使用起来需要另外学习如何开发这些云函数,会付出额外的学习成本。远程函数的使用模式是在线或者在本地开发,然后部署到线上,最后通过网络请求等方式调用。这种模式下,开发函数的过程和执行函数的过程是割裂的,远程函数开发部署之后,客户端并不能像调用本地逻辑代码那样调用远程函数,而是需要另外的软件开发工具包接口来调用这些远程函数,其间涉及到根据远程函数的规则来调用远程函数,以及和这些远程函数进行调试。

为了满足客户端按照本地调用的方式实现远程函数的调用执行,本发明实施例提供了一种远程函数调用的处理方法、装置、电子设备及存储介质,能够解决客户端使用远程函数进行开发的过程中需要额外学习如何开发远程函数,以及客户端不能像调用本地代码那样调用远程函数的技术问题。

下面说明本发明实施例提供的电子设备的示例性应用,本发明实施例提供的电子设备可以实施为笔记本电脑,平板电脑,台式计算机,机顶盒,移动设备(例如,移动电话,便携式音乐播放器,个人数字助理,专用消息设备,便携式游戏设备)等各种类型的终端设备,也可以实施为服务器。下面,将说明设备实施为终端设备时示例性应用。

参见图1,图1是本发明实施例提供的远程函数调用的处理系统100的一个可选的架构示意图,终端设备400-1通过网络300连接服务器200,客户端410-1在终端设备400-1中运行,网络300可以是广域网或者局域网,又或者是二者的组合。在终端设备上可以对远程函数进行本地执行,也可以经过网络通信的方式经由网络300向服务器调用远程函数使得远程函数在服务器上执行。

服务器200包括远程函数控制平台、代码仓库、对象存储平台和远程函数运行后台。在终端设备的客户端接收到逻辑代码之后,通过客户端对逻辑代码进行预处理得到代码文件和配置文件,并发送给所述服务器,以使远程函数控制平台对代码文件进行编译生成适配于远程函数规范的压缩文件,并按照配置文件对所述压缩文件进行命名,通过调用服务器中用于创建远程函数的应用程序编程接口,将压缩文件创建为封装有逻辑代码的远程函数,并在远程函数运行后台上部署远程函数,其中,代码文件将会由远程函数控制平台上传到代码仓库,以使得当终端设备的客户端需要进行调用的时候将代码仓库中的代码文件加载到本地,压缩文件将会由远程函数控制平台上传到对象存储平台。客户端向服务器请求加载代码,并向服务器发起调用远程执行请求。

参见图2,图2是本发明实施例提供的电子设备400的一个可选的结构示意图,图2所示的电子设备400包括:至少一个处理器410、存储器450、至少一个网络接口420和用户接口430。电子设备400中的各个组件通过总线系统440耦合在一起。可以理解,总线系统440用于实现这些组件之间的连接通信。总线系统440除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图2中将各种总线都标为总线系统440。

处理器410可以是一种集成电路芯片,具有信号的处理能力,例如通用处理器、数字信号处理器(DSP,Digital Signal Processor),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,其中,通用处理器可以是微处理器或者任何常规的处理器等。

用户接口430包括使得能够呈现媒体内容的一个或多个输出装置431,包括一个或多个扬声器和/或一个或多个视觉显示屏。用户接口430还包括一个或多个输入装置432,包括有助于用户输入的用户接口部件,比如键盘、鼠标、麦克风、触屏显示屏、摄像头、其他输入按钮和控件。

存储器450可以是可移除的,不可移除的或其组合。示例性的硬件设备包括固态存储器,硬盘驱动器,光盘驱动器等。存储器450可选地包括在物理位置上远离处理器410的一个或多个存储设备。

存储器450包括易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。非易失性存储器可以是只读存储器(ROM,Read Only Memory),易失性存储器可以是随机存取存储器(RAM,Random Access Memory)。本发明实施例描述的存储器450旨在包括任意适合类型的存储器。

在一些实施例中,存储器450能够存储数据以支持各种操作,这些数据的示例包括程序、模块和数据结构或者其子集或超集,下面示例性说明。

操作系统451,包括用于处理各种基本系统服务和执行硬件相关任务的系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。

网络通信模块452,用于经由一个或多个(有线或无线)网络接口420到达其他计算设备,示例性的网络接口420包括:蓝牙、无线相容性认证(WiFi)、和通用串行总线(USB,Universal Serial Bus)等。

呈现模块453,用于经由一个或多个与用户接口430相关联的输出装置431(例如,显示屏、扬声器等)使得能够呈现信息(例如,用于操作外围设备和显示内容和信息的用户接口)。

输入处理模块454,用于对一个或多个来自一个或多个输入装置432之一的一个或多个用户输入或互动进行检测以及翻译所检测的输入或互动。

在一些实施例中,本发明实施例提供的远程函数调用的处理装置可以采用软件方式实现,图2示出了存储在存储器450中的远程函数调用的处理装置455,包括函数获取模块4551、本地执行模块4552和远程执行模块4553三个模块,其可以是程序和插件等形式的软件,并可以嵌入各种客户端中,函数获取模块4551用于从服务器获取远程函数,本地执行模块4552用于响应于在客户端中执行远程函数的客户端代码,通过远程函数中封装的接口函数,执行获取的远程函数中封装的逻辑代码,以及将执行得到的调用结果返回客户端代码,远程执行模块4553用于响应于在服务器中执行远程函数的客户端代码,通过远程函数中封装的接口函数,向服务器发送调用远程函数的网络请求,以及将服务器返回的调用结果返回客户端代码。将在下文中具体说明各个模块的功能,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。

图2中还示出了存储在存储器450中的远程函数调用的处理装置456,存储器450可以存储有远程函数调用的处理装置455、远程函数调用的处理装置456中的任意一个或全部。远程函数调用的处理装置456包括远程函数配置模块4554、远程函数编译模块4555和远程函数创建模块4556三个模块,其可以是程序和插件等形式的软件,并可以嵌入各种客户端中,远程函数配置模块4554用于响应于客户端接收到逻辑代码的操作,通过客户端在逻辑代码中插入接口代码以得到代码文件,并通过客户端对逻辑代码进行扫描,以生成对应于逻辑代码的配置文件,远程函数编译模块4555用于响应于服务器接收到代码文件和配置文件,通过服务器对代码文件进行编译生成适配于远程函数规范的压缩文件,按照配置文件对压缩文件进行命名,远程函数创建模块4556用于通过调用服务器中用于创建远程函数的应用程序编程接口,将所述压缩文件创建为封装有所述逻辑代码的远程函数,所述远程函数中封装有对应于接口代码的接口函数,并在所述服务器中部署所述远程函数。将在下文中具体说明各个模块的功能,这些模块是逻辑上的,因此根据所实现的功能可以进行任意的组合或进一步拆分。

在另一些实施例中,本发明实施例提供的跨客户端的通信装置可以采用硬件方式实现,作为示例,本发明实施例提供的装置可以是采用硬件译码处理器形式的处理器,其被编程以执行本发明实施例提供的跨客户端的通信方法,例如,硬件译码处理器形式的处理器可以采用一个或多个应用专用集成电路(ASIC,Application Specific IntegratedCircuit)、DSP、可编程逻辑器件(PLD,Programmable Logic Device)、复杂可编程逻辑器件(CPLD,Complex Program mable Logic Device)、现场可编程门阵列(FPGA,Field-Programmable Gate Array)或其他电子元件。

下面将结合本发明实施例提供的电子设备的示例性应用和实施,说明本发明实施例提供的远程函数调用的处理方法。

参见图3A,图3A是本发明实施例提供的远程函数调用的处理方法的一个可选的流程示意图,将结合图3A示出的步骤进行说明,下述方法的步骤可以在上述电子设备上实现。

在步骤101中,通过客户端从服务器获取远程函数。

远程函数可以是服务器中为开发者提供的自带函数,通常远程函数是开发者根据不同的任务需求而主动开发创建之后部署到服务器上。因而,这里的远程函数可以来源于客户端开发者的自主创建。远程函数的创建可以是客户端开发机和服务器协同进行的。

这里的服务器包括远程函数控制平台、代码仓库、对象存储平台和远程函数运行后台。在终端设备的客户端接收到实现待创建函数功能需求的逻辑代码之后,通过客户端对逻辑代码进行预处理得到代码文件和配置文件,并发送给所述服务器,以使远程函数控制平台对代码文件进行编译生成适配于远程函数规范的压缩文件,并按照配置文件对所述压缩文件进行命名,通过调用服务器中用于创建远程函数的应用程序编程接口,将压缩文件创建为封装有逻辑代码的远程函数,并在远程函数运行后台上部署远程函数,其中,代码文件将会由远程函数控制平台上传到代码仓库,以使得当终端设备的客户端需要进行调用的时候将代码仓库中的代码文件加载到本地,压缩文件将会由远程函数控制平台上传到对象存储平台。

在一些实施例中,当客户端初始化时,将服务器的代码仓库中的远程函数的代码加载到本地。这样,当客户端需要调用远程函数的时,可以直接通过远程函数中封装的接口函数,在本地执行获取的远程函数中封装的逻辑代码,以及直接通过远程函数中封装的接口函数,向服务器发送调用远程函数的网络请求,以在远程服务器上执行远程函数中封装的逻辑代码,在客户端进行调用之前不需要再执行远程函数代码加载的过程,避免了客户端使用过程中处于网络连接质量出现波动而导致无法进行及时加载导致无法进行后续调用的问题。

在一些实施例中,当需要执行与远程函数相关的客户端代码时,将服务器的代码仓库中的远程函数的代码加载到本地。这样,当客户端需要执行与远程函数相关的客户端代码时,进行远程函数代码加载过程,每隔一个单位时间,清除加载到本地的远程函数的代码的缓存,通过这样的加载方式,可以减轻本地客户端的内存压力,仅在需要调用的时候执行代码加载过程。同时,监听客户端调用远程函数的事件,当监听时间超过了监听时间阈值时,且没有监听到客户端调用远程函数的事件,默认为客户端不需要调用远程函数的代码,则清除加载到本地的远程函数的代码的缓存,上述的单位时间可以为监听时间阈值。

在步骤102中,响应于在客户端中执行远程函数的客户端代码,通过远程函数中封装的接口函数,执行获取的远程函数中封装的逻辑代码,以及将执行得到的调用结果返回所述客户端代码。

在一些实施例中,当在客户端中本地执行远程函数的客户端代码时,通过远程函数中封装的接口函数,来执行远程函数中封装的逻辑代码,并将执行远程函数中封装的逻辑代码得到的调用结果返回给客户端代码。

在步骤103中,响应于在服务器中执行远程函数的客户端代码,通过远程函数中封装的接口函数,向服务器发送调用远程函数的网络请求,以及将服务器返回的调用结果返回所述客户端代码。

在一些实施例中,当在服务器中执行远程函数的客户端代码时,通过远程函数中封装的接口函数,来向服务器发送调用远程函数的网络请求,并将服务器上执行远程函数中封装的逻辑代码得到的调用结果返回给客户端代码。

这里的步骤102和步骤103分别对应于两种不同的代码调用模式,开发者调用时可以选择是真正执行本地代码还是执行网络上的远程函数代码,其实现是基于在远程函数的创建过程中,对远程函数进行了接口封装。接口封装所对应的接口函数中封装有远程函数中的逻辑代码和远程函数调用代码。在实际的调用过程中,实际被调用的是接口函数,因而对于开发者而言,提供了执行本地代码或是执行网络上的远程代码两种调用模式,当采用本地执行的调用模式执行本地代码时,有利于进行代码调试;当采用远程执行的调用模式执行服务器上的远程函数代码时,可以直接在后台修改代码以使得呈现给用户的客户端版本永远是最新的。

参见图3B,基于图3A,在步骤102中执行获取的远程函数中封装的逻辑代码之前,还可以执行步骤104-105。

在步骤104中,获取客户端代码中携带的表征客户端身份信息的标识。

在一些实施例中,远程函数中包括用于实现鉴权功能的鉴权代码,在执行获取远程函数中封装的逻辑代码之前,通过用于实现鉴权功能的鉴权代码可以主动获取到客户端代码中携带的客户端身份信息,此处,利用标识来表征客户端的身份信息,不同客户端的身份信息不同,并具有不同的标识。

在步骤105中,根据标识,通过远程函数对客户端进行鉴权处理,并确定鉴权通过。

在一些实施例中,鉴权代码中携带有判断客户端是否有授权可以调用远程函数的判断代码。这里,并不是所有的客户端都有权限可以调用远程函数,对于基于客户端开发者主动编写的逻辑代码而创建出的远程函数,其对应的授权对象是在最初创建远程函数时就预先设置的,调用远程函数的授权对象为在本地对远程函数中封装的逻辑代码进行预处理时所预先设置的客户端。不同的客户端具有不同的标识,基于携带有客户端身份信息的标识,识别发起调用远程函数的客户端是否属于预先设置的有权限可以调用该远程函数的客户端,具体是识别客户端的标识是否和预先设置的客户端的标识匹配。当客户端的标识和预先设置的客户端的标识匹配时,确定通过鉴权。另外,在远程函数中也可以不设置鉴权功能,没有设置鉴权功能的远程函数可以服务于所有客户端的,而不是特定客户端。

在步骤103中向服务器发送调用远程函数的网络请求之前,也执行步骤104-105。

在步骤104中,获取客户端代码中携带的表征客户端身份信息的标识。

在一些实施例中,远程函数中包括用于实现鉴权功能的鉴权代码,在向服务器发送调用远程函数的网络请求之前,通过用于实现鉴权功能的鉴权代码可以主动获取到客户端代码中携带的客户端身份信息,此处,利用标识来表征客户端的身份信息,不同客户端的身份信息不同。

在步骤105中,根据标识,通过远程函数对客户端进行鉴权处理,并确定鉴权通过。

在一些实施例中,鉴权代码中携带有判断客户端是否有授权可以调用远程函数的判断代码。这里,并不是所有的客户端都有权限可以调用远程函数,对于基于客户端开发者主动编写的逻辑代码而创建出的远程函数,其对应的授权对象是在最初创建远程函数时就预先设置的,调用远程函数的授权对象为在本地对远程函数中封装的逻辑代码进行预处理时所预先设置的客户端。不同的客户端具有不同的标识,基于携带有客户端身份信息的标识,识别发起调用远程函数的客户端是否属于预先设置的有权限可以调用该远程函数的客户端,具体识别客户端的标识是否和预先设置的客户端的标识匹配。当客户端的标识和预先设置的客户端的标识匹配时,确定通过鉴权。另外,在远程函数中也可以不设置鉴权功能,那么没有设置鉴权功能的远程函数可以服务于所有客户端的,而不是特定客户端。

参见图3C,基于图3A,在步骤S101和步骤S102之间可以包括步骤106-107。

在一些实施例中,有多个影响因素会影响到客户端采用本地执行的调用模式还是采用远程执行的调用模式。影响因素包括:客户端的宿主设备的硬件资源以及网络资源。对应于客户端的宿主设备的硬件资源的影响因素可以为中央处理器的闲置率和用于程序运行的存储空间的空闲率。对应于网络资源的影响因素可以为网络资源带宽。

在步骤106中,当客户端运行的网络环境的网络质量参数低于网络质量阈值时,确定在所述客户端中执行所述远程函数的客户端代码。

在一些实施例中,当客户端的运行的网络环境的网络质量参数低于网络质量阈值时,确定在客户端中执行远程函数的客户端代码。这里的网络质量阈值是预先设定的,当网络质量参数低于网络质量阈值时,则表明当前的网络质量无法支持以网络通信的方式通过远程函数中封装的接口函数,向服务器发送调用远程函数的网络请求,则确定在客户端中执行远程函数的客户端代码,此时是采取本地执行的调用模式。例如,在没有网络连接的情况下,且已经在客户端本地预先加载了远程函数的代码,则采取本地执行的调用模式;当网络通信环境为蜂窝连接时,则采取本地执行的调用模式。

在步骤107中,当客户端运行的网络环境的网络质量参数不低于网络质量阈值时,确定在所述服务器中执行所述远程函数的客户端代码。

在一些实施例中,当客户端的运行的网络环境的网络质量参数不低于网络质量阈值时,确定在所述服务器中执行所述远程函数的客户端代码。这里的网络质量阈值与上述实施例中的网络质量阈值意义相同,当网络质量参数不低于网络质量阈值时,则表明当前的网络质量可以支持以网络通信的方式通过远程函数中封装的接口函数,向服务器发送调用远程函数的网络请求,则确定在所述服务器中执行所述远程函数的客户端代码,此时是采取远程执行的调用模式。例如,当网络通信环境为Wi-Fi连接时,则采取远程执行的调用模式。

在一些实施例中,当客户端的宿主设备的中央处理器的闲置率低于其所对应的处理器闲置率阈值时,则采取远程执行的调用模式;当客户端的宿主设备的用于程序运行的存储空间的空闲率低于其所对应的存储空间阈值时,则采取远程执行的调用模式,以此避免增加处理器负载和避免占用过多的存储空间,导致运行速度变慢。

在一些实施例中,通过结合上述多个影响因素来确定调用模式,上述每一个影响因素均被分配一个权重,例如,网络质量参数的权重为0.5,中央处理器的闲置率的权重为0.3,用于程序运行的存储空间的空闲率的权重为0.2,分别针对于每种影响因素确定是否采用远程执行的调用模式,当确定为采用远程执行的调用模式,则记录为1,当确定为采用本地执行的调用模式,则记录为0,结合以上三种影响因素,按照三种影响因素对应的权重,计算得到调用模式加权参考值,预先设置调用模式加权参考值的门限为0.8,当调用模式加权参考值超出门限时,则采用远程执行的调用模式,这里的门限不局限于0.8,可以根据各个远程函数的历史调用数据设置。

基于本发明实施例,对于开发者而言,提供了执行本地代码或是执行网络上的远程代码这两种调用模式,当采用本地执行的调用模式来执行本地代码时,有利于进行代码调试;当采用远程执行的调用模式执行服务器上的远程函数代码,可以在后台修改代码使得呈现给用户的客户端版本永远是最新的。

参见图3D,基于图3A,在在步骤101中通过客户端从服务器获取远程函数之前,所述方法还包括步骤108-109。

在步骤108中,响应于客户端接收到逻辑代码的操作,通过客户端对逻辑代码进行预处理得到代码文件和配置文件,并发送给服务器,以使服务器对代码文件进行编译生成适配于远程函数规范的压缩文件,按照配置文件对压缩文件进行命名。

这里的服务器包括远程函数控制平台、代码仓库、对象存储平台和远程函数运行后台。在终端设备的客户端接收到实现待创建函数功能需求的逻辑代码之后,通过客户端对逻辑代码进行预处理得到代码文件和配置文件。在预处理过程中,可以在逻辑代码的基础上增加鉴权代码和接口代码,使得远程函数具有鉴权功能,并且在远程函数上加了接口封装。将经过预处理得到的代码文件和配置文件发送给服务器,以使服务器中的远程函数控制平台对代码文件进行编译生成适配于远程函数规范的压缩文件,并按照配置文件对压缩文件进行命名。

在步骤109中,通过调用服务器中用于创建远程函数的应用程序编程接口,将压缩文件创建为封装有逻辑代码的远程函数,并在服务器中部署远程函数。

通过调用服务器中用于创建远程函数的应用程序编程接口,将压缩文件创建为封装有逻辑代码的远程函数,并在远程函数运行后台上部署远程函数,其中,代码文件将会由远程函数控制平台上传到代码仓库,以使得当终端设备的客户端需要进行调用的时候将代码仓库中的代码文件加载到本地,压缩文件将会由远程函数控制平台上传到对象存储平台。

在一些实施例中,远程函数的创建也可以通过编译脚本实现,远程函数的创建和调用可以在同一个平台上进行,例如,直接在使用平台中开发远程函数,这两个过程也可以在不同的平台上进行。

参见图4A,图4A是本发明实施例提供的远程函数调用的处理方法的一个可选的流程示意图,将结合图4A示出的步骤进行说明,下述方法的步骤可以在终端设备和服务器上协同实现。

在步骤201中,响应于客户端接收到逻辑代码的操作,通过客户端在所述逻辑代码中插入接口代码以得到代码文件,并通过所述客户端对所述逻辑代码进行扫描,以生成对应于所述逻辑代码的配置文件。

在一些实施例中,远程函数的创建的初始步骤是通过客户端接收到最初的可以实现远程函数功能的逻辑代码,客户端开发者在自己的客户端开发机上编写代码,当客户端接收到逻辑代码时,通过客户端完成本地编译过程,这相当于代码的预处理阶段,在预处理过程中会插入接口代码以得到代码文件,并对远程函数的代码进行扫描,记录函数类名和方法名到配置文件中,从而分别得到代码文件和配置文件。这里插入接口代码是为了在原有的逻辑代码的基础上增加接口封装,从而实现通过接口代码进行远程调用使得客户端不需要再进行显示调用,可以像调用本地代码一样调用远程函数。

在步骤202中,响应于服务器接收到代码文件和配置文件,通过服务器对代码文件进行编译生成适配于远程函数规范的压缩文件,按照配置文件对压缩文件进行命名。

这里的服务器包括远程函数控制平台、代码仓库、对象存储平台和远程函数运行后台。在客户端接收到实现待创建函数功能需求的逻辑代码之后,通过客户端对逻辑代码进行预处理得到代码文件和配置文件,并发送给服务器,以使远程函数控制平台对代码文件进行编译生成适配于远程函数规范的压缩文件,并按照配置文件对压缩文件进行命名。

在步骤203中,通过调用服务器中用于创建远程函数的应用程序编程接口,将压缩文件创建为封装有逻辑代码的远程函数,远程函数中封装有对应于接口代码的接口函数,并在服务器中部署所述远程函数。

这里远程函数控制平台调用远程函数平台的用于创建远程函数的应用程序编程接口,将压缩文件创建为远程函数,这里的远程函数经过客户端的预处理过程已经封装有对应于接口代码的接口函数,至此远程函数创建完毕,将远程函数部署到远程函数运行后台上。

参见图4B,基于图4A,在步骤201中响应于客户端接收到逻辑代码的操作,通过客户端在所述逻辑代码中插入接口代码以得到代码文件,并通过所述客户端对所述逻辑代码进行扫描,以生成对应于所述逻辑代码的配置文件,可以通过步骤2011-2012实现。

在步骤2011中,查找逻辑代码。

在步骤2012中,当查找到标记为远程函数的逻辑代码时,在逻辑代码中插入鉴权代码和接口代码,并记录所述逻辑代码的类名和方法名至所述配置文件,以得到代码文件和配置文件。

在一些实施例中,需要在远程函数的运行时具有鉴权功能,通过在客户端本地编译阶段中在逻辑代码中插入鉴权代码来实现,对逻辑代码进行查找,当查找到标记为远程函数的逻辑代码时,在逻辑代码中插入鉴权代码和接口代码。鉴权代码可以用于实现鉴权功能,通过鉴权代码可以主动获取到客户端代码中携带的客户端身份信息。鉴权代码中携带有判断客户端是否有授权可以调用远程函数的判断代码。这里,并不是所有的客户端都有权限可以调用远程函数,对于基于客户端开发者主动编写的逻辑代码而创建出的远程函数,其对应的授权对象是在最初创建远程函数时就预先设置的,调用远程函数的授权对象为在本地对远程函数中封装的逻辑代码进行预处理时所预先设置的客户端。不同的客户端具有不同的表征客户端身份信息的标识,基于携带有客户端身份信息的标识,识别发起调用远程函数的客户端是否属于预先设置的有权限可以调用该远程函数的客户端,具体识别客户端的标识是否和预先设置的客户端的标识匹配。当客户端的标识和预先设置的客户端的标识匹配时,确定通过鉴权。另外,在远程函数中也可以不设置鉴权功能,那么没有设置鉴权功能的远程函数可以服务于所有客户端的,而不是特定客户端。

参见图4C,基于图4B,所述步骤2012中在逻辑代码中插入接口代码具体可以通过步骤2012A实现。

在步骤2012A中,通过字节码编辑方式在逻辑代码中加入接口代码,接口代码包括通过网络请求调用远程函数的接口代码和通过进程间通信机制在客户端执行远程函数的接口代码。

在一些实施例中,使用了计算机编程语言中的字节码编辑的手段,逻辑代码首先被编译为class文件。通过字节码编辑工具来编辑class文件,客户端在编辑class文件的时候首先识别出远程函数,并创建一个和远程函数同名不同参数的接口函数,通过接口函数实现通过发起HTTP请求和通过直接调用本地的逻辑代码这两种调用模式,这里的接口函数基于封装在接口函数中的接口代码实现。

对于用户而言,通过远程函数的接口函数可以实现如同调用本地代码一样来调用远程函数,而不用关心具体的调用细节,也不用手动书写调用HTTP请求的代码,同时,客户端还可以直接调用本地的远程函数。

参考图5,图5为本发明实施例提供的客户端编译功能示意图。基于上述实施例,通过客户端预处理编译技术,生成供宿主客户端使用的软件包,里面包含远程函数的接口函数,生成供本地服务器客户端使用的软件包,里面包含远程函数的具体逻辑代码,生成供远程函数控制平台使用的压缩包,里面包含封装在远程函数中的逻辑代码和封装在接口函数中的接口代码的代码文件,以及远程函数的配置文件。

这里的宿主客户端是类似于微信这样的终端设备上的供用户使用的客户端,调用封装在远程函数中的逻辑代码的源头是宿主客户端,远程函数运行在远程函数运行后台上,导致开发者不能直接对逻辑代码进行调试,通过设置本地服务器客户端,使得远程函数的逻辑代码可以在本地服务器客户端上运行,使得开发者可以在本地服务器客户端上可以进行调试,调试之后的远程函数可以上传到远程函数运行后台上执行,本地服务器客户端的作用和远程服务器的作用是一样的,远程函数可以在本地服务器客户端上执行,也可以在远程服务器上执行,在宿主客户端可以执行本地服务器客户端上的封装在远程函数中的逻辑代码,也可以调用运行在远程函数运行后台上的逻辑代码。

这里,供宿主客户端使用的软件包是远程函数的代码文件编译为class文件之后通过字节码编辑技术为远程函数增加的接口函数。在接口函数中有调用HTTP请求访问远程函数对应的接口代码和通过IPC调用本地远程函数对应的接口代码。供本地服务器客户端使用的软件包是远程函数的代码文件编译为class文件之后直接打包的软件包文件。本地服务器客户端集成这个软件包文件之后,宿主客户端调用远程函数接口文件是按照本地执行的调用方式,那么远程函数的逻辑代码会通过安卓IPC机制被调用到本地服务器客户端上被执行。供远程函数控制平台使用的压缩包是由客户端上传到远程函数控制平台的,首先遍历远程函数的代码文件,接着记录远程函数的包名、类名和方法名,然后生成远程函数的配置文件,之后将远程函数的配置文件和代码文件一同打包为压缩包文件,最后上传到远程函数控制平台。

参考图4D,基于图4A,所述方法还包括步骤204。

在步骤204中,接收来自于客户端的针对于逻辑代码的更新,根据更新的逻辑代码创建更新的远程函数,并移除远程函数。

在一些实施例中,远程函数并不是保持恒定的,根据任务需求会创建新的远程函数,通过远程函数控制平台对远程函数进行创建、更新和删除的过程,当接收到来自于客户端的针对于逻辑代码的更新,根据更新的逻辑代码创建更新的远程函数,并移除远程函数。

在远程函数控制平台中,将压缩包文件解压,接着编译其中的代码文件,得到编译出来的软件包文件,再解析远程函数的配置文件,最后根据配置文件和软件包文件向远程函数运行后台创建云函数。远程函数控制平台具有创建、更新和删除远程函数的功能,通过远程函数控制平台可以控制开发者是否可以提交远程函数,开发者需要向远程函数控制平台申请专有的密钥,只有提交请求中携带了专有的密钥的请求,才能被远程函数控制平台识别。

在一些实施例中,用户与远程函数控制平台之间进行加密通信,客户端和远程函数控制平台都采用非对称加密方法进行加解密,首先远程函数控制平台生成私钥和公钥对,用户预先存放远程函数控制平台的公钥,用户通过客户端在递交代码文件时,使用远程函数控制品台的公钥加密代码文件,远程函数控制平台用私钥解密代码文件。当函数远程控制平台可以成功解密代码文件时,则用户是被允许使用远程函数控制平台实现远程函数的上传、创建、更新和删除。

本发明并不仅限于基于安卓平台,也可以通过安卓和苹果双系统实现。

本发明在技术实现上分为远程函数开发阶段、远程函数集成阶段、远程函数的创建和部署阶段以及远程函数的调用阶段。在实际应用远程函数可以为云函数。

参见图6,图6是本发明实际应用中的远程函数的开发、集成、创建以及部署过程的时序图。

如图6所示,客户端开发者通过开发机进行代码编写,在开发机上可以完成本地的预处理编译,在编译逻辑代码的过程中,会对代码中标记为云函数的代码进行扫描,这里的云函数即为远程函数,记录函数类名和方法名到配置文件中,同时在标记为云函数的代码中插入鉴权代码,之后将代码文件和配置文件上传到远程函数控制平台。上传代码文件完成之后,云函数控制平台会对代码文件进行编译,生成适配云端规范的压缩包。并将该压缩包上传到分布式存储平台中,这里的分布式存储平台即为对象存储品台,以配置文件中的类名和方法名对压缩包进行命名。云函数控制平台通过调用云函数平台中用于创建云函数的应用程序编程接口,将之前上传到分布式存储平台中的压缩文件创建为云函数,至此云函数创建完毕,再将创建完毕的云函数部署到运行后台。

在远程函数调用阶段,客户端调用云函数首先需要将代码仓库中的代码加载到本地,然后就可以像调用其他本地方法一样调用云函数代码。开发者调用时可以选择时真正执行本地代码还是执行网络上的云函数代码。在代码编译的过程中,云函数代码中增加有一层接口封装。参见图7,图7是本发明实际应用中的实现远程函数调用的示意图。这个接口函数有两种实现:云函数中的逻辑代码和云函数远程调用代码。开发者在代码中实际调用的是该接口函数,因而开发者可以选择调用本地逻辑从而方便调试,也可以调用远程执行。从而客户端开发不需要学习各种云函数的调用方法,没有学习成本,同时利用本地代码,开发者拥有了本地调试云函数的能力。

这里,在普通开发模式中如果需要调用HTTP请求需要主动书写发起HTTP请求的代码,云函数是运行在云函数运行后台上,是通过HTTP触发执行的,所以在普通开发模式中,如果需要在开发的客户端中调用云函数,就需要手动书写HTTP请求的代码以进行显式地调用,但是在本发明中,开发人员在开发的客户端中调用云函数时,不需要主动编写调用云函数的HTTP请求的代码。这是因为在通过客户端进行代码编译的时候,会在代码的编译期间为云函数生成接口函数,在接口函数中自带调用HTTP请求的代码,这里使用了Java字节码编辑的手段,Java代码首先被编译为class文件,Java提供字节码编辑工具来编辑class文件,在编辑class文件的时候首先识别出云函数,然后编辑出一个和云函数同名不同参数的接口函数,在接口函数中编写HTTP请求和直接调用本地云函数。用户使用的是云函数的接口函数,所以用户不用手动书写调用HTTP请求的代码,并且用户编写的客户端代码中可以选择直接调用本地云函数。

下面继续说明本发明实施例提供的远程函数调用的处理装置455实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器440的远程函数调用的处理装置455中的软件模块可以包括:函数获取模块4551、本地执行模块4552和远程执行模块4553。

函数获取模块4551,用于通过客户端从服务器获取远程函数。

本地执行模块4552,用于响应于在所述客户端中执行所述远程函数的客户端代码,通过所述远程函数中封装的接口函数,执行所述获取的远程函数中封装的逻辑代码,以及将执行得到的调用结果返回所述客户端代码。

远程执行模块4553,响应于在服务器中执行所述远程函数的客户端代码,通过所述远程函数中封装的接口函数,向服务器发送调用远程函数的网络请求,以及将所述服务器返回的调用结果返回所述客户端代码。

在一些实施例中,所述装置还包括:鉴权模块,用于在执行所述获取的远程函数中封装的逻辑代码之前,获取所述客户端代码中携带的表征客户端身份信息的标识;根据所述标识,通过所述远程函数对所述客户端进行鉴权处理,并确定鉴权通过。

在一些实施例中,所述鉴权模块,还用于:在向服务器发送调用远程函数的网络请求之前,获取所述客户端代码中携带的表征客户端身份信息的标识;根据所述标识,通过所述远程函数对所述客户端进行鉴权处理,并确定鉴权通过。

在一些实施例中,所述装置还包括:模式选择模块,用于当客户端运行的网络环境的网络质量参数低于网络质量阈值时,确定在所述客户端中执行所述远程函数的客户端代码;当客户端运行的网络环境的网络质量参数不低于网络质量阈值时,确定在所述服务器中执行所述远程函数的客户端代码。

在一些实施例中,所述装置还包括:远程函数部署模块,用于响应于所述客户端接收到所述逻辑代码的操作,通过所述客户端对所述逻辑代码进行预处理得到代码文件和配置文件,并发送给所述服务器,以使所述服务器对代码文件进行编译生成适配于远程函数规范的压缩文件,按照所述配置文件对所述压缩文件进行命名;

所述远程函数部署模块,还用于通过调用服务器中用于创建远程函数的应用程序编程接口,将所述压缩文件创建为封装有所述逻辑代码的远程函数,并在所述服务器中部署所述远程函数。

下面继续说明本发明实施例提供的远程函数调用的处理装置456实施为软件模块的示例性结构,在一些实施例中,如图2所示,存储在存储器440的远程函数调用的处理装置456中的软件模块可以包括:远程函数配置模块4554、远程函数编译模块4555和远程函数创建模块4556。

远程函数配置模块,用于响应于客户端接收到逻辑代码的操作,通过所述客户端在所述逻辑代码中插入接口代码以得到代码文件,并通过所述客户端对所述逻辑代码进行扫描,以生成对应于所述逻辑代码的配置文件。

远程函数编译模块,用于响应于服务器接收到所述代码文件和所述配置文件,通过所述服务器对代码文件进行编译生成适配于远程函数规范的压缩文件,按照所述配置文件对所述压缩文件进行命名。

远程函数创建模块,用于通过调用服务器中用于创建远程函数的应用程序编程接口,将所述压缩文件创建为封装有所述逻辑代码的远程函数,所述远程函数中封装有对应于接口代码的接口函数,并在所述服务器中部署所述远程函数。

在一些实施例中,所述远程函数配置模块4554还用于:

查找所述逻辑代码;

当查找到标记为远程函数的逻辑代码时,在所述逻辑代码中插入鉴权代码和接口代码,并记录所述逻辑代码的类名和方法名至所述配置文件,以得到所述代码文件和所述配置文件。

在一些实施例中,所述远程函数配置模块4554还用于:

通过字节码编辑方式在所述逻辑代码中加入所述接口代码,所述接口代码包括通过网络请求调用远程函数的接口代码和通过进程间通信机制在所述客户端执行所述远程函数的接口代码。

在一些实施例中,所述装置还包括:

远程函数管理模块,用于接收来自于所述客户端的针对于所述逻辑代码的更新,根据所述更新的逻辑代码创建更新的远程函数,并移除所述远程函数。

本发明实施例提供一种电子设备,包括:

存储器,用于存储可执行指令;

处理器,用于执行所述存储器中存储的可执行指令时,实现本发明实施例提供的远程函数调用的处理方法。

本发明实施例还提供一种存储有可执行指令的存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本发明实施例提供的远程函数调用的处理方法,例如,如图3A至图3D任一附图示出的远程函数调用的处理方法以及图4A至图4D任一附图示出的远程函数调用的处理方法。

在一些实施例中,存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。

在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。

作为示例,可执行指令可以但不一定对应于文件系统中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在HTML文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。

作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。

综上所述,通过本发明实施例具有以下有益效果:

1)为客户端开发提供了代码远程执行的能力,客户端开发可以把原本只能在本地执行的逻辑放在远程服务器上执行,在业务多变的场景下,可以帮助客户端开发迅速修改逻辑并上线。

2)由于逻辑代码执行在远程服务器中,可以规避客户端设备处理器运算力不足,设备存储空间不足和网络环境不稳定等问题。

3)开发者拥有对于远程函数的本地调试能力。

以上所述,仅为本发明的实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号