zoukankan      html  css  js  c++  java
  • 使用XMLRPC搭建WebService服务器

    1、XMLRPC概念

    xml rpc是使用http协议做为传输协议的rpc机制,使用xml文本的方式传输命令和数据。一个rpc系统,必然包括2个部分:
    1.rpc client,用来向rpc server调用方法,并接收方法的返回数据;
    2.rpc server,用于响应rpcclient的请求,执行方法,并回送方法执行结果。RPC是Remote Procedure Call的缩写,翻译成中文就是远程过程调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了提高各个分立机器的“互操作性”而发明出来的技术。

    2、搭建RPC服务端

    首先定义服务器中运行的方法,然后创建xml rpc对象,注册两个方法,获取从客户端传来的数据,服务器传过来的数据是一个xml请求数据,最后调用服务器中的方法,返回的数据格式也是xml数据格式。

    <?php
    //定义可以被访问的方法
    function hello(){
        return 'hello world!';
    }
    
    //rpc server在调用函数时调用的参数是
    // array(0=>'函数名',1=>array(实参1,实参2,实参3....),2=>NULL)
    function sum($method,$args,$extra){
        return array_sum($args);
    }
    
    //创建xmlrpc Server
    $server = xmlrpc_server_create();
    xmlrpc_server_register_method($server, 'hello', 'hello');
    xmlrpc_server_register_method($server, 'sum', 'sum');
    
    //收取请求
    $request = $HTTP_RAW_POST_DATA;
    
    //调用方法
    $response = xmlrpc_server_call_method($server, $request, null);
    
    //输出数据
    header('Content-type:text/xml;charset=utf-8');
    echo $response;
    
    //销毁xmlrpc Server资源
    xmlrpc_server_destroy($server);
    ?>

    3、搭建RPC客户端

    首先定义了一个类,名为RpcClient,类中主要有3个方法,一个为__call方法,这是一个魔术方法,当调用类中不存在的方法时就会触发此模式方法,将方法名和参数包装成xml数据,然后调用类中的第二个方法__query方法,在该方法中包装一个http post请求,请求携带的数据就为__call方法中形成的xml数据,然后访问该请求。最后将获得的xml数据解析为php格式。

    <?php
    class RpcClient{
        private $url;//xmlrpc server的地址
    
        //构造方法
        public function __construct($url = ''){
            $this->url = $url;
        }
    
        //请求远程服务器
        private function __query($request){
            $context = stream_context_create(
                array(
                    'http'=>array(
                        'method'=>'POST',
                        'header'=>'Content-type:text/xml',
                        'content'=>$request
                    )
                )
            );
            return xmlrpc_decode(file_get_contents($this->url,false,$context));
        }
    
    
        //魔术方法
        public function __call($method,$params){
            $request = xmlrpc_encode_request($method, $params);
            return $this->__query($request);
        }
    }
    //测试调用
    header('Content-type:text/html;charset=utf-8');
    $client = new RpcClient('http://localhost/booledu/webservice/xmlrpc_server.php');
    echo 'hello方法:'.$client->hello().'<br/>';//调用远程服务器中的hello方法
    echo 'sum方法:'.$client->sum(1,2,3);//调用远程服务器中的sum方法
    ?>

    运行结果:

    这里写图片描述

  • 相关阅读:
    MS CRM 2011 RC中的新特性(4)——活动方面之批量编辑、自定义活动
    最近的一些有关MS CRM 2011的更新
    MS CRM 2011 RC中的新特性(6)——连接
    MS CRM 2011 RC中的新特性(7)—仪表板
    参加MS CRM2011深度培训课程——第一天
    MS CRM 2011插件调试工具
    MS CRM2011实体介绍(四)——目标管理方面的实体
    MS CRM 2011 RC中的新特性(3)——客户服务管理方面
    MS CRM 2011 RC中的新特性(8)—数据管理
    ExtAspNet 登陆
  • 原文地址:https://www.cnblogs.com/cnsec/p/13407038.html
Copyright © 2011-2022 走看看