5-21

一、学习xml rpc的基础知识和如何使用

http://limu713.blog.163.com/blog/static/15086904201141751743218/

最近的云计算管理平台项目中,我们的web门户需要调用底层的虚拟机相关的函数,一直觉得很神奇(偶是一个不懂web的孩子~),web前端怎么就跟后台的那些处理函数联系起来的呢,今天有时间,花了半天的时间大致搞明白了究竟是咋回事。

       先是看了大家提交上来的文档,才知道是xmp-rpc在做事,前后端的代码就是通过它进行通信的,前端(外部)语言可以为ruby或者java等,发送请求,根据该请求,找到xml-rpc中对应的命令,比如,one.vn.info,然后xmp-rpc接收并处理该请求,最终是调用底层的RequestManager类中的相应函数。服务器端处理后,再将结果返回给客户端,即前端的程序。

       但是,因为还不是特别明白,今天从网上查了些资料,了解了xmp-rpc的大致情况,以下为我的简单总结。

1、xml-rpc是什么?

      XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用。它是一套允许运行在不同操作系统、不同环境的程序实现基于Internet过程调用的规范和一系列的实现。这种远程过程调用使用http作为传输协议,XML作为传送信息的编码格式。Xml-Rpc的定义尽可能的保持了简单,但同时能够传送、处理、返回复杂的数据结构      

        简单来讲,一个rpc系统,必然包括2个部分:

        A、rpc client,用来向rpc server调用方法,并接收方法的返回数据;

        B、rpc server,用于响应rpc client的请求,执行方法,并回送方法执行结果。

2、xml-rpc的工作原理
        简单描述,xml-rpc的工作原理为:

        rpc-client的工作原理:rpcclient根据URL找到rpcserver -> 构造命令包,调用rpcserver上的某个服务的某个方法 -> 接收到rpcserver的返回,解析响应包,拿出调用的返回结果。
        rpc-server的工作原理:启动一个webserver(在使用内置的webserver的情况下) -> 注册每个能提供的服务,每个服务对应一个Handler类 ->进入服务监听状态。

       下面是从网上找的一个图,很明白的说明它的工作原理:      

        比起DCOM、CORBA、SOAP,它的优点主要是:

       1)简单、轻量级;

       2)XML编码,可读性增强,同时也便于手工修改;

       3)利用HTTP传输,方便的穿透防火墙(80端口),便于使用SSL加密等。

       缺点:

      1)对字符编码的支持不够,通常用Base64编码来解决中文问题;

     2)Datetime数据类型没有时区;XML-RPC学习 - 笨笨blog - 亮丽

 
3、实例

    下面是一个简单的例子,说明如何使用xml-rpc进行编程,包括客户端和服务器端的代码

    服务器使用内置的webserver,端口号为9001,启动服务器服务,监听客户端的请求;客户端发送两个值,服务器调用函数,经过处理后,返回这两个值的加和减的值。

//*********************************  客户端代码************************************//
package test;
import java.util.*;
import org.apache.xmlrpc.*;
public class XmlRPCClient {
  // 服务器端的url

private final static String server_url =
      "http://localhost:9001";
  public static void main(String[] args) throws Exception{
      XmlRpc.debug = true;
      // Create an object to represent our server.
      XmlRpcClient server = new XmlRpcClient(server_url);

      // Build our parameter list.
      Vector params = new Vector();
      params.addElement(new Integer(5));
      params.addElement(new Integer(3));

      // Call the server, and get our result.

      //mysample为handler的名称,sumAndDifference为调用的函数名称
      Hashtable result = (Hashtable) server.execute("mysample.sumAndDifference",
          params);
      int sum = ( (Integer) result.get("sum")).intValue();
      int difference = ( (Integer) result.get("difference")).intValue();
      System.out.println("Sum: " + Integer.toString(sum) +
                         ", Difference: " +
                         Integer.toString(difference));
  }
}
//********************************* ************************************//

 

//********************************** 服务器端代码************************************//
package test;

import java.util.*;
import org.apache.xmlrpc.WebServer;

public class JavaServer {

  public JavaServer() {
  }

  public Hashtable sumAndDifference(int x, int y) {
    Hashtable result = new Hashtable();
    result.put("sum", new Integer(x + y));
    result.put("difference", new Integer(x - y));
    return result;
  }

  public static void main(String[] args) {
    try {
      // Invoke me as <http://localhost:9001/RPC2>.
      WebServer webserver = new WebServer(9001);
      webserver.addHandler("mysample", new JavaServer());
      webserver.start();
    }
    catch (Exception exception) {
      System.err.println("JavaServer: " + exception.toString());
    }
  }
}

/***************************************************************************************/ 

二、安装svn软件,并从服务器上下载代码

三、继续熟悉newpayweb代码,学习了订单的生成规则和一些基础知识

1.Random r = new Random; r.netInt(int a); 生成0-a之间的随机数。

2.request.getRemoteAddr();

三、连接sql server 2000数据库


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值