分类: 云计算
2013-03-08 15:35:13
server端主要有三部分构成:
(1)主循环线程
(2)XML-RPC server,即xml-rpc stubs
(3)RPC处理函数集合
XML-RPC的执行过程可以概括为:
(1)构造RPC请求的参数列表,类似于函数的参数(java版)
(2)初始化一个RPC,主要包括初始化RPC的名称以及处理RPC请求的服务器的URL(包括端口)
(3)client端执行RPC
(4)server处理RPC,执行对应的RPC handler,处理完成后调用回调函数,用来完成返回值的组织
(5)client端处理RPC的返回值,完成返回值的解释。
2. XML-RPC 类型
(1)4bytes 整型
(2)布尔型
(3)字符串型(string)
(4)时间戳
(5)以上类型的数组
(6)以上类型的结构体
3. 同步RPC vs. 异步RPC
(1)client发起rpc请求执行server上的RPC的时候会阻塞,直到server完成RPC请求的处理然后返回,被称为同步RPC。
(2)client发起请求后,为该请求产生独立的线程,请求立即返回,被称为异步RPC
XML-RPC的返回值为通用的数据类型-xml_rpc_c::value,client端必须明确知道所需的类型,将通用类型的返回值通过强制类型转换为所需的类型。
对于异步类型的RPC,client端必须定义一些回调函数(call-back functions)用来报告RPC返回值的正确与否,如RPC处理成功回调函数,RPC处理失败回调函数等,当RPC请求被server处理处理完成,将结果返回给client端之前,会自动调用回调函数,在回调函数中组织返回给client端的返回值。
4. server端初始化及执行步骤
(1)定义RPC处理函数集合
C++: Subclass xmlrpc_c::method //每一个类代表一个RPC处理函数
Java: Create a new public class
(2)在server端创建监听XML-RPC的socket,并指定监听端口,具体参见RequestManager::start()中的setup_socket()函数
(3)在server端注册RPC处理函数,具体参见:RequestManager::register_xml_methods()
(4)启动server,通常为server创建独立的线程,具体参见:
5. RPC处理函数的注册
RPC处理函数的注册是server端最重要的步骤,要完成一个RPC处理函数的注册,概括起来分为以下几步(以deploy虚拟机的RPC处理函数为例):
(1)xmlrpc_c::methodPtr vm_deploy(new VirtualMachineDeploy()); //定义VirtualMachineDeploy类,实现RPC处理函数execute()
(2)RequestManagerRegistry.addMethod("one.vm.deploy", vm_deploy);//注册deploy对应的RPC处理函数
通过类VirtualMachineDeploy来完成处理Deploy RPC请求所需的操作,然后通过定义vm_deploy函数,其参数为该类的实例,然后通过addMethod将vm_deploy函数注册到server中的RPC处理函数集合中。