XMLRPC

  XMLRPC 为以http为传输协议,使用xml格式化数据来执行远程过程调用, 区别于本地过程调用, 即发生在不同主机之间。

  属于分布式计算的一种简单实现,比web service简单易用。xml语言被多种语言广泛支持,是一种可扩展的标记语言,

xmlrpc被多种平台实现,以此提供的服务可以客户端和服务器端使用不同语言,

具有平台无关性,比socket发送网络字节序具有优势, 不用考虑大小端问题, 且报文内容遵循规定格式, 易于处理和阅读。

  此为UseLand公司制定的一套标准,http://xmlrpc.scripting.com/default.html, 角色分服务器端和客户端, 可以被不同语言实现,

c --- http://xmlrpc-c.sourceforge.net/

lua --- https://github.com/timn/lua-xmlrpc

php --- https://github.com/gggeek/phpxmlrpc/releases/tag/2.2.2

java --- http://ws.apache.org/xmlrpc/

luaXMLRPC

  luaXMLRPC是lua语言实现的一套软件包, 可以访问 和 提供 xmlrpc服务, 即服务器和客户端角色都支持。

https://github.com/timn/lua-xmlrpc

  

  客户端主要实现功能, 将lua table数据转换为 XML RPC message,

然后通过luaSocket库以http协议发送出去,

对于响应回来的XML RPC message 使用XML解析器 luaExpat 反向解析为 lua table,和返回值。

The http.lua file implements a simple stand-alone client based on LuaSocket 2.0.2. The following function is provided:

call (url, method [, params])
Execute the call to method at location url with the given params (if any). The method and params parameters will be just passed to clEncode function. The result is the same as clDecode function: a boolean indicating whether the call was successful or not, followed by the response value (if successful) or by the faultString and the faultCode (if the call fails).

  服务器端, CGILUA接收到XML RPC message后, 使用luaExpat解析为lua table, 后调用相应方法,

将执行结果组装成XML RPC response message, 发送回客户端。

  服务器端注册方法接口:

srvMethods (tab_or_func)Register the methods on the server. The parameter can be a table or a dispatching function. If a table is given it can have one level of objects with the corresponding methods. If a function is given, it will replace the dispatcher.

  luaXMLRPC提供的一些库函数,参见来自下载包帮助文档:

  

Library functions

The xmlrpc.lua file implements the functions that encode and decode XML-RPC messages and transform data types between the Lua and XML-RPC. The functions are:

clEncode (method_name [, params]) => method_call
Build a XML-RPC document containing a methodCall element. It receives a string with the method's name and an optional list of parameters. The result is a string containing the XML-RPC document.
clDecode (method_response) => ok, results
Disassemble the server response into a Lua object. It receives a string containing the XML-RPC document representing the methodResponse element. The result is a boolean indicating wether the call was successful or not followed by the resulting objects (typically a methodResponse has only one value so only one Lua object will be returned). In case of error the false value is followed by the XMLRPC faultString and the faultCode. This values are extracted from the fault element.
srvDecode (method_call) => method_name, list_params
Disassemble the client request into a method's name and a table with the list of parameters. It receives a string containing the XML-RPC document representing the methodCall element. The result is a string with the name of the method to be called and a Lua table with the arguments to the call.
srvEncode (object, is_fault) => method_response
Build a XML-RPC document containing a methodResponse element. It receives a Lua object (a number, a string, a table, a "created typed value" etc.) with the return value of the call. The result is a string containing the XML-RPC document. Note that XML-RPC defines that a response only returns one value so a Lua function that returns more than one value has to pack them into a table to guarantee that all of them will be returned. The second parameter (is_fault) can be used to force a fault element to be generated instead of a params. In this case, the Lua object must be a table with the members faultCode and faultString.
srvMethods (tab_or_func)
Register the methods on the server. The parameter can be a table or a dispatching function. If a table is given it can have one level of objects with the corresponding methods. If a function is given, it will replace the dispatcher.
dispatch (method_name) => function
Returns a Lua function that implements the method call. Note that the object is encapsulated into that function so that the call will be turned into a real method call.

luaXMLRPC client + phpXMLRPC server 实例

  php服务器端运行环境, 需要先行安装 xamp 软件包(https://www.apachefriends.org/zh_cn/index.html),

xamp为 x系统(包括 Linux windows mac) + a (Apache web server)+ m (MySql database)+ p (php server script interpretor),

为流行的php开发环境。

  phpXMLRPC服务器端, xmlrpc还不是php的原始库,需要下载,下载地址 http://phpxmlrpc.sourceforge.net/。

下载后,解压后,将其的lib目录拷贝出来并命名为libphpxmlrpc, 拷贝到 php 的 xamp/php/pear(珍珠)目录。

使用下面博客中 加法 服务例子(http://blog.csdn.net/flyingfalcon/article/details/2229488),

在\xampp\htdocs目录下建立一个php文件 xmlrpc_server.php:

<?php

include ("libphpxmlrpc/xmlrpc.inc");
include ("libphpxmlrpc/xmlrpcs.inc"); if ($_SERVER['REQUEST_METHOD'] != 'POST')
exit(0); $add_sig = array(array($xmlrpcString, $xmlrpcInt, $xmlrpcInt));
$add_doc = "Add the two integer together"; function add($params)
{
global $xmlrpcerruser; $val = php_xmlrpc_decode($params); $ret = $val[0] + $val[1]; return new xmlrpcresp(new xmlrpcval($ret, "int"));
} $server = new xmlrpc_server(array(
"add" => array(
"function" => "add",
"signature" => $add_sig,
"docstring" => $add_doc
))); ?>

  luaXMLRPC 客户端,按照github下载的压缩包中的帮助文档, 将 src文件夹命名为 xmlrpc,

拷贝到 LUA_PATH 目录即可, 即与 lua.exe 平级。

Lua XML-RPC is composed by three Lua files:

init.lua
Main source file providing the API
http.lua
API to call XML-RPC via HTTP
server.lua
Server side API

These files should be copied to a directory named xmlrpc created in your LUA_PATH.

  luaXMLRPC客户端代码,放到test.lua中, 与lua.exe平级,功能 实现 加法 XMLRPC 请求,

require "xmlrpc.http"

local ok, res = xmlrpc.http.call ("http://127.0.0.1/xmlrpc_server.php", "add", , )

if not ok then
print ("not ok")
print("error="..res)
else
print ("ok")
print("sum ="..res);
end

  客户端运行结果

  

LuaXMLRPC笔记的更多相关文章

  1. git-简单流程(学习笔记)

    这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. SQL Server技术内幕笔记合集

    SQL Server技术内幕笔记合集 发这一篇文章主要是方便大家找到我的笔记入口,方便大家o(∩_∩)o Microsoft SQL Server 6.5 技术内幕 笔记http://www.cnbl ...

  4. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  5. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  6. NET Core-学习笔记(三)

    这里将要和大家分享的是学习总结第三篇:首先感慨一下这周跟随netcore官网学习是遇到的一些问题: a.官网的英文版教程使用的部分nuget包和我当时安装的最新包版本不一致,所以没法按照教材上给出的列 ...

  7. springMVC学习笔记--知识点总结1

    以下是学习springmvc框架时的笔记整理: 结果跳转方式 1.设置ModelAndView,根据view的名称,和视图渲染器跳转到指定的页面. 比如jsp的视图渲染器是如下配置的: <!-- ...

  8. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  9. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

随机推荐

  1. UVA 11461 - Square Numbers(水题)

    题目链接 #include <cstdio> #include <cstring> #include <string> #include <cmath> ...

  2. 【poj2828】Buy Tickets

    Description Railway tickets were difficult to buy around the Lunar New Year in China, so we must get ...

  3. 关于VSS上的项目源码管理的注意问题

    1.将项目添加到vss上面去 如果项目取的名字没有问题,则不需要去vss上面去新建项目,直接在解决方案那里右击“添加到vss”中,把第一个输入框中的名字(xxxx.root)全部清除掉.确定即可. 2 ...

  4. VS2010 F5调试时出现:“ 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常”解决

    VS2010 F5调试时出现 尝试运行项目时出错:未捕获通过反射调用的方法引发的异常 两个解决方法:1) 打开项目属性,选择调试选项卡,将“启用非托管代码调试”一项钩上.2) 打开项目属性,选择调试选 ...

  5. ASP.NET生成静态方法

    CMS系统如果新闻多了,全部生成静态的话.不现实,而且占用空间比较大.那么只生成网站首页是必须的了,下面列出JCMS首页生成静态的方法.换一种思路其实更简单. 当点击生成首页静态的时候.去获取动态首页 ...

  6. JavaScript笔记——引用类型之Object类型和Function类型

    <JavaScript高级程序设计>中介绍的几种JavaScript的引用类型,本文只记了Object跟Function类型 Object类型 创建对象 var person = new ...

  7. JS中注意事项

    (一)判断中注意事项 一.所有的相对路径都别拿来做判断 1.img src='...' 2.href='1.css', href='html/index.html' 3.img src='http:/ ...

  8. Log4cplus使用

    Log4cplus使用¶ 1.1 简介 log4cplus是C++编写的开源日志系统,前身是java编写的log4j日志系统.log4cplus具有线程安全.灵活.以及多粒度控制的特点,通过将信息划分 ...

  9. 快速安装zabbix agent并部署监控

    1.准备yum源: epel源:yum install -y zabbix22-agent 2.上传脚本: 上传脚本事先写好的监控脚本到/script/下面 3.修改配置文件:Server=10.10 ...

  10. Android studio快捷键总结

    功能 快捷键   功能 快捷键 格式化代码 command + alt + L   运行程序到设备 Ctrl + R 导包.修正 alt + enter   运行Debug到设备 Ctrl + D 复 ...