跨语言调用方法、服务器及存储介质与流程

文档序号:14897439发布日期:2018-07-08 09:00阅读:243来源:国知局

本发明涉及服务调用领域,尤其涉及一种跨语言调用方法、服务器及计算机可读存储介质。



背景技术:

dubbo是一种基于阿里巴巴开源的分布式服务框架,致力于提高性能和透明化的远程过程调用协议(remoteprocedurecallprotocol,rpc)服务调用方案,以及面向服务的体系结构(service-orientedarchitecture,soa)治理方案。目前,业内基于dubbo框架的服务平台,不支持跨语言的服务调用。也就是说,在基于dubbo框架的服务平台,服务方只能使用java语言提供服务,请求方也只能使用java语言来调用服务。这样使得服务调用语言单一,限制了服务调用。



技术实现要素:

鉴于以上内容,本发明提供一种跨语言调用方法、服务器及计算机可读存储介质,能够兼容java、c++、paython、ruby等语言进行rpc调用,实现跨语言调用。

为实现上述目的,本发明提供一种跨语言调用方法,该方法包括:

接收服务方的接口信息、主机集群ip地址和端口地址,将服务方的主机集群ip地址和端口地址写入注册中心;

根据所述接口信息创建一个接口类,保存到存储器;

调用类加载器将接口类从存储器加载到内存;

根据所述接口信息从注册中心查询服务方提供的服务信息;

根据查询到的服务信息创建一个与上述接口类对应的代理类;

根据代理类生成唯一的统一资源定位器(uniformresourelocator,url);

接收请求方发出的http协议格式的服务调用请求;

将服务调用请求从http协议格式转换为hessian协议格式;

根据调用请求中的url地址找到对应的代理类,根据代理类与接口类的对应关系找到相应的invoker实体;

由该invoker实体将hessian协议格式的服务调用请求发送给服务方的相应主机,发起服务访问请求。

优选地,所述接口类定义了接口包名、接口类名、接口类中方法名、请求参数及返回函数。

优选地,所述服务方通过注册中心发布服务信息,并获得接口信息。

优选地,所述服务方若有多台主机提供服务,则所述代理类也包括多个invoker实体与所述多台主机相关联。

优选地,所述url的生成规则是根据每一个方法名自动生产一个唯一的url地址。

此外,本发明还提供一种服务器,该服务器包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的跨语言调用程序,所述跨语言调用程序被所述处理器执行,可实现如下步骤:

接收服务方的接口信息、主机集群ip地址和端口地址,将服务方的主机集群ip地址和端口地址写入注册中心;

根据所述接口信息创建一个接口类,保存到存储器;

调用类加载器将接口类从存储器加载到内存;

根据所述接口信息从注册中心查询服务方提供的服务信息;

根据查询到的服务信息创建一个与上述接口类对应的代理类;

根据代理类生成唯一的url;

接收请求方发出的http协议格式的服务调用请求;

将服务调用请求从http协议格式转换为hessian协议格式;

根据调用请求中的url地址找到对应的代理类,根据代理类与接口类的对应关系找到相应的invoker实体;

由该invoker实体将hessian协议格式的服务调用请求发送给服务方的相应主机,发起服务访问请求。

优选地,所述服务方通过注册中心发布服务信息,并获得接口信息。

优选地,所述服务方若有多台主机提供服务,则所述代理类也包括多个invoker实体与所述多台主机相关联。

优选地,所述url的生成规则是根据每一个方法名自动生产一个唯一的url地址。

此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中包括跨语言调用程序,所述跨语言调用程序被处理器执行时,可实现如上所述跨语言调用方法中的任意步骤。

本发明提出的跨语言调用方法、服务器及计算机可读存储介质,通过接收服务方的接口信息、主机集群ip地址和端口地址,将服务方的主机集群ip地址和端口地址写入注册中心,然后根据接口信息创建一个接口类,保存到存储器,调用类加载器将接口类从存储器加载到内存,再根据接口信息从注册中心查询服务方提供的服务信息,创建一个与上述接口类对应的代理类,根据代理类生成唯一的url,最后接收请求方发出的http协议格式的服务调用请求,将服务调用请求从http协议格式转换为hessian协议格式,根据调用请求中的url地址找到对应的代理类,根据代理类与接口类的对应关系找到相应的invoker实体,由该invoker实体将hessian协议格式的服务调用请求发送给服务方的相应主机,发起服务访问请求,hessian协议是开源、通用协议,在平台和服务方实现hessian协议的情况下,服务方可以c、c++、phython等多种语言实现服务,从而解决服务方、请求方调用语言单一的问题,实现跨语言调用。

附图说明

图1为本发明服务器较佳实施例的示意图;

图2为跨语言调用方法的应用环境示意图;

图3为图1或图2中跨语言调用程序较佳实施例的模块示意图;

图4为本发明跨语言调用方法较佳实施例的流程图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,是本发明服务器1较佳实施例的示意图。

在本实施例中,服务器1可以是服务器、智能手机、平板电脑、个人电脑、便携计算机以及其它具有运算功能的电子设备。

该服务器1包括:存储器11、处理器12、网络接口13、通信总线14及存储在存储器11上并可在所述处理器12上运行的跨语言调用程序10。

其中,网络接口13可选地可以包括标准的有线接口、无线接口(如wi-fi接口)。通信总线14用于实现这些组件之间的连接通信。

存储器11至少包括一种类型的可读存储介质。所述至少一种类型的可读存储介质可为如闪存、硬盘、多媒体卡、卡型存储器等的非易失性存储介质。在一些实施例中,所述存储器11可以是所述服务器1的内部存储单元,例如该服务器1的硬盘。在另一些实施例中,所述存储器11也可以是所述服务器1的外部存储单元,例如所述服务器1上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard,fc)等。

在本实施例中,所述存储器11不仅可以用于存储安装于所述服务器1的应用软件及各类数据,例如跨语言调用程序10、二进制编解码规范等,还可以用于暂时地存储已经输出或者将要输出的数据,如接口类。

处理器12在一些实施例中可以是一中央处理器(centralprocessingunit,cpu),微处理器或其它数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如执行跨语言调用程序10的计算机程序代码和请求消息二进制的编解码等。

优选地,该服务器1还可以包括显示器,显示器可以称为显示屏或显示单元。在一些实施例中显示器可以是led显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(organiclight-emittingdiode,oled)触摸器等。显示器用于显示在服务器1中处理的信息以及用于显示可视化的工作界面。

优选地,该服务器1还可以包括用户接口,用户接口可以包括输入单元比如键盘(keyboard)、语音输出装置比如音响、耳机等。

在图1所示的服务器1实施例中,作为一种计算机存储介质的存储器11中存储跨语言调用程序10的程序代码,处理器12执行跨语言调用程序10的程序代码时,实现如下步骤:

接收服务方的接口信息、主机集群ip地址和端口地址,将服务方的主机集群ip地址和端口地址写入注册中心;

根据所述接口信息创建一个接口类,保存到存储器;

调用类加载器将接口类从存储器加载到内存;

根据所述接口信息从注册中心查询服务方提供的服务信息;

根据查询到的服务信息创建一个与上述接口类对应的代理类;

根据代理类生成唯一的url;

接收请求方发出的http协议格式的服务调用请求;

将服务调用请求从http协议格式转换为hessian协议格式;

根据调用请求中的url地址找到对应的代理类,根据代理类与接口类的对应关系找到相应的invoker实体;

由该invoker实体将hessian协议格式的服务调用请求发送给服务方的相应主机,发起服务访问请求。

本实施例中,如图2所示,是跨语言调用方法的应用环境示意图,服务器1提供一个服务页面2,该页面用于接收服务方3填写的接口信息、主机集群ip地址和端口地址。其中所述接口信息是服务方3登录服务器1前,通过注册中心5发布服务信息来获得的。跨语言调用程序10接收到服务方3填写的接口信息、主机集群ip地址和端口地址后,将服务方3的主机集群ip地址和端口地址写入注册中心5。例如,当服务方s想在该服务器提供人脸识别服务时,先在zookeeper发布服务信息。zookeeper收到服务信息后返回一个接口信息给服务方s。服务方s将接口信息、主机集群ip地址和端口地址填写在该服务器的服务页面,该服务器将服务方s处理人脸识别的主机集群ip地址和端口地址写入zookeeper。

跨语言调用程序10根据接收到的接口信息创建一个接口类。其中,服务方所提供的接口信息包括包名、类名和方法名等。因此,所述接口类定义了包名、类名、方法名、请求参数及返回参数。例如:

packagecom.pa.api.user;//定义接口类

publicinterfaceiuserservice//定义包名

{

publicmap<string,string>getuser(stringuserid);//定义方法名,请求参数及返回参数为字符串

publicstringsayhello(stringreq);//定义方法名

}

再将生成的接口类保存到本地存储器,如硬盘、磁盘等。创建的接口类是将服务方3的服务暴露给请求方4的端口,方便调用。

跨语言调用程序10调用类加载器将接口类从本地存储器加载至虚拟机内存。其中,所述生成的接口类只是保存在本地的存储器,需使用该接口类时,跨语言调用程序10通过调用类加载器将接口类加载到虚拟机内存。假设需要调用服务方s的接口类时,启动虚拟机,然后将服务方s的接口类从硬盘加载到系统的运行内存上。

跨语言调用程序10根据接口信息从注册中心5查询服务方提供的服务信息。例如,跨语言调用程序接收到服务方s填写的接口信息后,在zookeeper中查询服务方s的关于人脸识别的服务信息。

跨语言调用程序10根据查询到的服务信息创建一个与上述接口类对应的代理类。其中,服务方3接口下若有多台主机提供服务,对应的代理类也有多个invoker实体与多个主机关联。例如,跨语言调用程序根据服务信息,自动重写dubbo初始化流程,创建一个与接口类对应的动态代理类。使得代理类与接口类进行绑定。

跨语言调用程序10根据创建的代理类生成唯一的url。其中,url的生成规则是根据每一个方法名自动生产一个唯一的url地址。并将唯一的url地址与对应的接口类进行绑定。其中url是web页的地址,主要由两个主要的部分构成:协议和目的地。其中协议包括http、ftp、telnet等,目的地可以是某文件名、目录名或者某台计算机的名称。例如,跨语言调用程序将代理类生成的唯一的url地址与虚拟机上的接口类进行绑定,使得请求方a在搜索服务时,能够找到服务方s。

当请求方4需要申请服务时,请求方4向跨语言调用程序10发送http协议格式的服务调用请求,跨语言调用程序10接收请求方4发出的http协议格式的服务调用请求。其中,服务调用请求由请求方法uri协议/版本、请求头、请求正文三部分组成。例如,请求方a向基于dubbo平台发送http协议格式的人脸识别服务调用请求。

跨语言调用程序10将服务调用请求从http协议格式转换为hessian协议格式。其中,跨语言调用程序10与服务方3预先确定服务调用请求的二进制编解码规范,hessian通过预先确定的二进制编解码规范将服务调用请求进行二进制编码,产生二进制码流。根据产生的二进制码流读取服务调用请求中的url地址。其中,hessian协议是开源、通用协议,在跨语言调用程序10和服务方3实现hessian协议的情况下,请求方4可以java、c++、paython、ruby等多种语言对服务方3进行服务调用。例如,基于dubbo平台将请求方a的人脸识别服务调用请求从http协议格式转换为hessian协议格式,生成二进制码流。

跨语言调用程序10根据服务调用请求中的url地址找到对应的代理类,再根据接口类与代理类的对应关系找到相对应的invoker实体。例如,基于dubbo平台根据人脸识别服务调用请求中的url地址找到对应的代理类,再根据接口类与代理类的对应关系从接口类中找到相对应的invoker实体。

该invoker实体将hessian协议格式的服务调用请求的二进制码流发送给服务方3与该invoker实体相对应的主机,服务方3根据预先确定的二进制编解码规范对服务调用请求的二进制码流进行解码,读取出请求方4的服务调用请求,发起服务调用。例如,服务方s的人脸识别主机接收到invoker实体发送的hessian协议格式的人脸识别服务调用请求后,利用预先确定的二进制编解码规范对hessian协议格式的二进制码流进行解码,发起人脸识别服务调用。

上述实施例提出的跨语言调用方法,提供一个接收接口信息、主机集群ip地址和端口地址的服务页面,将主机集群ip地址和端口地址写入注册中心并根据接口信息创建接口类加载到虚拟机内存上,再根据接口信息从注册中心查询服务信息创建代理类并生成唯一的url,然后接收请求方发出的http协议格式服务调用请求,将http协议格式转换为hessian协议格式,并根据url地址找到对应的接口类,及对应的invoker实体,最后由该invoker实体将hessian协议格式的服务调用请求发送给服务方相应的主机,兼容了其它语言进行服务调用,实现请求方与服务方的跨语言调用。

如图3所示,是图1或图2中跨语言调用程序10较佳实施例的模块示意图。本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段。

在本实施例中,跨语言调用程序10包括:接收模块110、接口类创建模块120、加载模块130、查询模块140、代理类创建模块150、url生成模块160、转换模块170、查找模块180、发送模块190,所述模块110-190所实现的功能或操作步骤均与上文类似,此处不再详述,示例性地,例如其中:

接收模块110,用于接收服务方的接口信息、主机集群ip地址和端口地址,将服务方的主机集群ip地址和端口地址写入注册中心或接收请求方发出的http协议格式的服务调用请求;

接口类创建模块120,用于根据所述接口信息创建一个接口类,保存到存储器;

加载模块130,用于调用类加载器将接口类从存储器加载到内存;

查询模块140,用于根据所述接口信息从注册中心查询服务方提供的服务信息;

代理类创建模块150,用于根据查询到的服务信息创建一个与上述接口类对应的代理类;

url生成模块160,用于根据代理类生成唯一的url;

转换模块170,用于将服务调用请求从http协议格式转换为hessian协议格式;

查找模块180,用于根据调用请求中的url地址找到对应的代理类,根据代理类与接口类的对应关系找到相应的invoker实体;

发送模块190,用于由该invoker实体将hessian协议格式的服务调用请求发送给服务方的相应主机,发起服务访问请求。

如图4所示,是本发明跨语言调用方法较佳实施例的流程图。

在本实施例中,处理器12执行存储器11中存储的跨语言调用程序10的计算机程序时实现跨语言调用方法的如下步骤:

步骤s10,接收服务方的接口信息、主机集群ip地址和端口地址,将服务方的主机集群ip地址和端口地址写入注册中心;

步骤s20,根据所述接口信息创建一个接口类,保存到存储器;

步骤s30,调用类加载器将接口类从存储器加载到内存;

步骤s40,根据所述接口信息从注册中心查询服务方提供的服务信息;

步骤s50,根据查询到的服务信息创建一个与上述接口类对应的代理类;

步骤s60,根据代理类生成唯一的url;

步骤s70,接收请求方发出的http协议格式的服务调用请求;

步骤s80,将服务调用请求从http协议格式转换为hessian协议格式;

步骤s90,根据调用请求中的url地址找到对应的代理类,根据代理类与接口类的对应关系找到相应的invoker实体;

步骤s100,由该invoker实体将hessian协议格式的服务调用请求发送给服务方的相应主机,发起服务访问请求。

本实施例中,如图2所示,是跨语言调用方法的应用环境示意图,服务器1提供一个服务页面2,该页面用于接收服务方3填写的接口信息、主机集群ip地址和端口地址。其中所述接口信息是服务方3登录服务器1前,通过注册中心5发布服务信息来获得的。跨语言调用程序10接收到服务方3填写的接口信息、主机集群ip地址和端口地址后,将服务方3的主机集群ip地址和端口地址写入注册中心5。例如,当服务方s想在服务器提供声纹识别服务时,先在zookeeper发布服务信息。zookeeper收到服务信息后返回一个接口信息给服务方s。服务方s将接口信息、主机集群ip地址和端口地址填写在服务器的服务页面,该平台将服务方s处理声纹识别的主机集群ip地址和端口地址写入zookeeper。

跨语言调用程序10根据接收到的接口信息创建一个接口类。其中,服务方3所提供的接口信息包括包名、类名和方法名等。因此,所述接口类定义了包名、类名、方法名、请求参数及返回参数。例如:

packagecom.pa.api.user;//定义接口类

publicinterfaceiuserservice//定义包名

{

publicmap<string,string>getuser(stringuserid);//定义方法名,请求参数及返回参数为字符串

publicstringsayhello(stringreq);//定义方法名

}

再将生成的接口类保存到本地存储器,如硬盘、磁盘等。创建的接口类是将服务方3的服务暴露给请求方4的端口,方便调用。

跨语言调用程序10调用类加载器将接口类从本地存储器加载至虚拟机内存上。其中,所述生成的接口类只是保存在本地的存储器,需要使用该接口类时,调用类加载器将接口类加载到虚拟机内存。假设需要调用服务方s的接口类时,启动虚拟机,然后将服务方s的接口类从硬盘加载到系统的运行内存上。

跨语言调用程序10根据接口信息从注册中心5查询服务方3提供的服务信息。例如,基于dubbo平台接收到服务方s填写的接口信息后,在zookeeper中查询服务方s的关于声纹识别的服务信息。

跨语言调用程序10根据查询到的服务信息创建一个与上述接口类对应的代理类。其中,服务方3接口下若有多台主机提供服务,对应的代理类也有多个invoker实体与多个主机关联。例如,跨语言调用程序根据服务信息,自动重写dubbo初始化流程,创建一个与接口类对应的动态代理类。使得代理类与接口类进行绑定。

跨语言调用程序10根据创建的代理类生成唯一的url。其中,url的生成规则是根据每一个方法名自动生产一个唯一的url地址。并将唯一的url地址与对应的接口类进行绑定。其中url是web页的地址,主要由两个主要的部分构成:协议和目的地。其中协议包括http、ftp、telnet等,目的地可以是某文件名、目录名或者某台计算机的名称。例如,跨语言调用程序将代理类生成的唯一的url地址与虚拟机上的接口类进行绑定,使得请求方a在搜索服务时,能够找到服务方s。

当请求方4需要申请服务时,请求方4向跨语言调用程序10发送http协议格式的服务调用请求,跨语言调用程序10接收请求方4发出的http协议格式的服务调用请求。其中,服务调用请求由请求方法uri协议/版本、请求头、请求正文三部分组成。例如,请求方a向基于dubbo平台发送http协议格式的声纹识别服务调用请求。

跨语言调用程序10将服务调用请求从http协议格式转换为hessian协议格式。其中,跨语言调用程序10与服务方3预先确定服务调用请求的二进制编解码规范,hessian通过预先确定的二进制编解码规范将服务调用请求进行二进制编码,产生二进制码流。根据产生的二进制码流读取服务调用请求中的url地址。其中,hessian协议是开源、通用协议,在服务器和服务方3实现hessian协议的情况下,请求方4可以java、c++、paython、ruby等多种语言对服务方3进行服务调用。例如,跨语言调用程序将请求方a的声纹识别服务调用请求从http协议格式转换为hessian协议格式,生成二进制码流。

跨语言调用程序10根据服务调用请求中的url地址找到对应的接口类,再根据接口类与代理类的对应关系从代理类中找到相对应的invoker实体。例如,跨语言调用程序根据声纹识别服务调用请求中的url地址找到对应的代理类,再根据接口类与代理类的对应关系从接口类中找到相对应的invoker实体。

该invoker实体将hessian协议格式的服务调用请求的二进制码流发送给服务方3与该invoker实体相对应的主机,服务方3根据预先确定的二进制编解码规范对服务调用请求的二进制码流进行解码,读取出请求方4的服务调用请求,发起服务调用。例如,服务方s的声纹识别主机接收到invoker实体发送的hessian协议格式的声纹识别服务调用请求后,利用预先确定的二进制编解码规范对hessian协议格式的二进制码流进行解码,发起声纹识别服务调用。

上述实施例提出的跨语言调用方法,通过将服务页面接收的主机集群ip地址和端口地址写入注册中心,根据接收的接口信息创建接口类并加载到虚拟机内存上,然后根据接口信息查询服务信息并创建代理类生成唯一的url,最后将接收到服务调用请求的http协议格式转换为hessian协议格式,并找到对应的invoker实体将hessian协议格式的服务调用请求发送给服务方的相应主机,使得基于dubbo平台能够兼容java、c++、paython、ruby等语言进行调用,扩大服务调用范围。

此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质中包括跨语言调用程序10,所述跨语言调用程序10被处理器执行时实现如下操作:

接收服务方的接口信息、主机集群ip地址和端口地址,将服务方的主机集群ip地址和端口地址写入注册中心;

根据所述接口信息创建一个接口类,保存到存储器;

调用类加载器将接口类从存储器加载到内存;

根据所述接口信息从注册中心查询服务方提供的服务信息;

根据查询到的服务信息创建一个与上述接口类对应的代理类;

根据代理类生成唯一的url;

接收请求方发出的http协议格式的服务调用请求;

将服务调用请求从http协议格式转换为hessian协议格式;

根据调用请求中的url地址找到对应的代理类,根据代理类与接口类的对应关系找到相应的invoker实体;

由该invoker实体将hessian协议格式的服务调用请求发送给服务方的相应主机,发起服务访问请求。

优选地,所述接口类定义了接口包名、接口类名、接口类中方法名、请求参数及返回函数。

优选地,所述服务方通过注册中心发布服务信息,并获得接口信息。

优选地,所述服务方若有多台主机提供服务,则所述代理类也包括多个invoker实体与所述多台主机相关联。

优选地,所述url的生成规则是根据每一个方法名自动生产一个唯一的url地址。

本发明之计算机可读存储介质的具体实施方式与上述跨语言调用方法的具体实施方式大致相同,在此不再赘述。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1