在PHP中利用XML技术构造远程服务_php基础_脚本之家

四、基于XML_RPC的Web服务
利用XML_RPC构造和运用服务是很有益于的。公司为自个儿提供的各样服务配置XML_RPC服务器,客商、客商软件和客商集团就足以行使这种服务组织出高级服务也许面向最终顾客的行使。这种提供更使得、廉价和杰出服务的角逐将十分大地升高应用服务的质感。
但这里还留存有的标题有待消除,比方如何编目、索引、找出Web上的劳动?UDDI试图缓和那一个主题材料,可是这一个规范并不轻易,并且业界对它的反响也未尝明了。可是,在商城内部采纳XML_RPC不只可以够改正代码的可重用性,何况还大概会推动生机勃勃种崭新的遍及式总括形式,在事后的数年中它自然成为风流倜傥种主要的学识财富。XML_RPC的发展从化解布满式总结难题以致成为服务式Web的基本范畴开端,从而赢得了贰个格外好的始发,其后一定会将紧随着大家对该专门的工作的垂怜。既然如此,今后就让大家来看看XML_RPC的其实使用吧!
4.1 在PHP中选用XML_RPC
对于提供Web服务以来,PHP是风流浪漫种非常精美的语言。咱们只需编写好PHP代码不过把它内置三个适中的岗位,就马上有了三个可透过ULacrosseL“调用”的劳动。PHP中的XML_RPC完成恐怕复杂也只怕轻巧,但大家具备许五种接纳。这里大家选用的是根源Useful
Information
Company的XML_RPC完结,它的代码和文书档案能够从
这个XML_RPC完成的基本类涉及七个文本:
xmlrpc.inc:富含XML_RPC的php客商端所急需的类
xmlrpcs.inc:满含XML_RPC的php服务器所要求的类 4.2 客商端
编写XML_RPC顾客端意味着: 1.成立一个XML_RPC央求音讯 2.装置XML_RPC参数
3.创立一个XML_RPC新闻 4.出殡和安葬音信 5.得到应答 6.讲明应答
请看下边这些例子: <?php $f=new
xmlrpcmsg(‘examples.getStateName’,array(new xmlrpcval卡塔尔国; $c=new
xmlrpc_client(“/RPC2”, “betty.userland.com”, 80State of Qatar; $r=$c->send; if {
print “状态代码”. $HTTP_POST_VARS[“stateno”] . “是” .
$v->scalarval(卡塔尔(قطر‎ . “<B福睿斯>”; print
“<H本田UR-V>那是服务器的作答<BMurano><PRE>” . htmlentities. “</PRE><HENVISION>n”;
} else { print “错误: “; print “代码: ” . $r->faultCode(卡塔尔(قطر‎ . ” 原因:
‘” .$r->faultString(State of Qatar.”‘<BTucson>”; } ?>
在此个例子中,大家先成立了三个调用“examples.getStateName”方法的XML_RPC新闻,并传递了三个项目为“int”值为14的整数参数。然后,大家创制了三个陈诉待调用UEscortL的客商。接着,大家发送了音信,选择应答对象并检讨错误。假设不设有似是而非,大家就体现结果。
编写RPC顾客程序时要用到的入眼函数如下: 创造顾客用: $client=new
xmlrpc_client($server_path, $server_hostname, $server_port卡塔尔(قطر‎;
发送音讯的措施是: $response=$client->send;
它回到的是xmlrpcresp的贰个实例。大家所传递的音讯是xmlrpcmsg的实例,它用如下方法创造:
$msg=new xmlrpcmsg($methodName, $parameterArray卡塔尔(قطر‎;
methodName是待调用的方法的名字,parameterArray是xmlrpcval对象的php数组。比方:
$msg=new xmlrpcmsg(“examples.getStateName”, array(new xmlrpcval卡塔尔(قطر‎;
xmlrpcval对象能够用如下情势创设: <?php $myVal=new xmlrpcval;
$myVal=new xmlrpcval($scalarVal, “int” | “boolean” | “string” | “double”
| “dateTime.iso8601” | “base64”); $myVal=new xmlrpcval($arrayVal,
“array” | “struct”); ?>
第生机勃勃种样式创造的是xmlrpc字符串值。第二种样式成立的是描述值和项指标值。第三种格局通过在数组等等的布局中结合别的xmlrpc值成立复杂的指标,举个例子:
<?php $myArray=new xmlrpcval(array(new xmlrpcval, new xmlrpcval,new
xmlrpcval, “array”卡塔尔(قطر‎; $myStruct=new xmlrpcval(array( “name” => new
xmlrpcval, “age” => new xmlrpcval, “geek” => new xmlrpcval(1,
“boolean”State of Qatar卡塔尔(قطر‎,”struct”卡塔尔(قطر‎; ?>
应答对象是xmlrpcresp类型,通过调用客户对象的send方法赢得。在服务器端,大家得以通过如下情势开创xmlrpcresp类型的靶子:
$resp=new xmlrpcresp; 而在客商端,则选取如下方法从答应获取xmlrpcval:
$xmlrpcVal=$resp->value(State of Qatar;
接下来大家就足以用上边这种措施获得描述应答结果的PHP变量:
$scalarVal=$val->scalarval(卡塔尔;
对于复杂的数据类型,有四个函数特别常有用,那三个函数都在xmlrpc.inc内:
$arr=xmlrpc_decode;
该函数重返贰个PHP数组,个中饱含了xmlrpcval变量$xmlrpc_val之内的数额,那么些数量现已被改换到PHP自己装有的变量类型。
$xmlrpc_val=xmlrpc_encode;
该函数重回一个xmlrpcval类型的值,在那之中富含了$phpval描述的PHP数据。对于数组和布局,此方法能够进行递归解析。注意,这里不设有对非基本数据类型的支撑。
4.3 服务器端
利用xmlrpcs.inc提供的类编排服务特简单。要开创一个劳动,大家依照如下格局开创xmlrpc_server的实例:
<?php $s=new xmlrpc_server( array(“examples.myFunc” =>
array(“function” => “foo”))); ?>
传递给xmlrpc_server布局函数的是三个联合具名数组的一路数组。进程“examples.myFunc”调用“foo”函数,由于那么些缘故foo被叫作方法句柄。
编写方法句柄异常的粗略。上面是叁个措施句柄的骨架: <?php function foo {
global $xmlrpcerruser; // 引进客户错误代码值 //
$params是三个xmlrpcval对象的数组 if { // 错误条件 return new
xmlrpcresp(0, $xmlrpcerruser+1, // 客商错误1 “Error!”); } else { // 成功
return new xmlrpcresp(new xmlrpcval(“Fine!”, “string”卡塔尔(قطر‎); } } ?>
能够看出,程序检查了错误,如存在似是而非则赶回错误;不然假如一切平常,则赶回描述操作成功新闻的xmlrpcresp。
五、应用实例
在底下这些例子中我们将组织多个劳动。对于给定的数值n,服务重返n*2。客商端应用该服务总计5*2的值。
服务器端的代码如下: <?php include(“xmlrpc.inc”卡塔尔;
include(“xmlrpcs.inc”卡塔尔(قطر‎; function foo { global $xmlrpcerruser; //
引进客户错误代码值 // $params是xmlrpcval对象的二个数组
$vala=$params->params[0]; $sval=$vala->scalarval();
$ret=$sval*2; return new xmlrpcresp(new xmlrpcval($ret, “int”)); }
$s=new xmlrpc_server( array(“product” => array(“function” =>
“foo”卡塔尔(قطر‎State of Qatar卡塔尔; ?> 顾客端代码如下: <?php include(“xmlrpc.inc”卡塔尔(قطر‎; if
($HTTP_POST_VARS[“number”]!=””) { $f=new
xmlrpcmsg(‘product’,array(new xmlrpcval($HTTP_POST_VARS[在PHP中利用XML技术构造远程服务_php基础_脚本之家。”number”],
“int”))); $c=new xmlrpc_client(“/xmlrpc/servfoo.php”,
“luigi.melpomenia.com.ar”, 80); $c->setDebug; $v=$r->value(); if {
print “Number “. $HTTP_POST_VARS[“number”] . ” is ” .
$v->scalarval(卡塔尔(قطر‎ . “<B奥迪Q5>”; print
“<HTucson>来自服务器的结果!<BLacrosse><PRE>” . htmlentities.
“</PRE><HRAV4>n”; } else { print “操作退步: “; print “代码: ” .
$r->faultCode(卡塔尔 . ” 原因: ‘” .$r->faultString(卡塔尔(قطر‎.”‘<BOdyssey>”; } }
print “<FORM METHOD=”POST”> <INPUT NAME=”number” VALUE=”${number}”>
<input type=”submit” value=”go” name=”submit”></FORM><P>
输入叁个数值”; ?>
截至语:XML_RPC服务的周转还论及任何过多根底设备和底子职业,如布满式进度的编目和目录机制,又如在编制程序语言中管理XML_RPC的更加好接口等。有关XML_RPC和服务式Web的广播发表很多,让大家用心关怀它们的迈入吗!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章