由于项目对外提供API的需要,今天看了Dave Winer的《Programming Web Services with XML-RPC》,他是XML-RPC的发起者(之一)。
先说这本书:英语没过六级的最好看翻译版的(不知道有没有),其中句式复杂,词汇诡异,过了6级的硬着头皮看应该还应付的过去;书的内容不错,<Foreword>讲了XML_RPC的起源和发展,<Preface>随便看看就成,<Chapter 1. Introduction>没什么印象了,对我来说最精彩的一章莫属<Chapter 2 .The XML-PRC Protocol>,从Data Types,Request Format,到Response Format都很精彩,也是看完就能出成绩的章节。后面的章节从Java, Perl, PHP, ASP各语言的角度对使用进行详细分析,可惜我关心的PHP只有短短半页。
然后在网上详细看了PHPRPC http://phprpc.org/zh_CN/,做了一个DEMO,发现还蛮好用的。
客户端用js,代码如下
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>RPC</title>
<script type="text/javascript" src="../js/phprpc/compressed/phprpc_client.js"></script>
<script type="text/javascript">
var rpc = new PHPRPC_Client('../php/rpc.php', ['sha1','Hi']);
function $(id) {
return document.getElementById(id);
}
function showResult(result) {
$('sha1').value = result;
}
function sha1() {
var input = $('sha1').value;
$('sha1').value = "Loading...";
rpc.Hi(input, showResult);
}
</script>
</head>
<body>
<input type="text" id="sha1" />
<input type="button" value="���� SHA1" οnclick="sha1()" />
</body>
</html>
服务器端用PHP,代码如下
<?php
require_once("phprpc/phprpc_server.php");
$server = new PHPRPC_Server();
function Hi($name)
{
return 'Hello ' . $name;
}
$server->add("sha1");
$server->add("Hi");
$server->start();
?>
总的来说,用动态语言实现RPC还是蛮方便的。