xmlrpc协议是通过http请求xml数据进行通信。webservice中和它相同的是soap。soap调用的确很简单,但是创建wsdl太繁琐,效率低下。xmlrpc很好的解决这个问题。
(1).创建xmlrpc服务端(求和函数api)
function getSum($method,$args,$extra)
{
return array_sum($args);
}
//创建RPC服务
$server = xmlrpc_server_create();
//注册RPC服务支持的函数
xmlrpc_server_register_method($server, 'getSum', 'getSum');
//获取客户端POST原始请求内容
//$request = $HTTP_RAW_POST_DATA;
$request = file_get_contents('php://input');
//执行调用客户端的XML请求获取执行结果
$xmlrpc_response = xmlrpc_server_call_method($server, $request, null);
//定义XML的Header头部
header('content-type:text/xml');
//输出XML
echo $xmlrpc_response;
//销毁资源句柄
xmlrpc_server_destroy($server);(2).创建xmlrpc客户端调用
class RpcClient
{
/**
* RPC服务地址
* @var string
*/
protected $url;
public function __construct($url)
{
$this->url = $url;
}
protected function __query($request)
{
//创建请求上下文
$context = stream_context_create([
'http' => [
'method' => 'post',
'header' => 'content-type:text/xml',
'content' => $request
]
]);
//请求RPC服务器
$response = file_get_contents($this->url, false, $context);
if ($response != false)
{
$response = xmlrpc_decode($response);
}
return $response;
}
public function __call($name, $arguments)
{
$request = xmlrpc_encode_request($name, $arguments);
return $this->__query($request);
}
}
$url = 'http://learn.cn/server.php';
$client = new RpcClient($url);
$result = $client->getSum(2);
var_dump($result);提示:服务端创建完成后可以直接使用xmlrpc_encode_request生成xml进行post数据即可,这里只是对客户端请求封装了一下,另外服务器端的函数一定要标注3个参数,第一个参数一定是函数名,第二个参数是请求数组
php多进程应用场景主要是非web端,fpm下是不支持多进程的,非类linux操作系统都不支持,请在cli模式使用.可以使用多进程做任务分发,批量计算,批量文件处理,批量爬虫,网络运维等等。下面看一份简单的入门demo//创建子进程 $pid=pcntl_fork(); //返回-1,创建失败,不...
开发com组件可以用c++,vc++,net,我比较熟悉net,演示用dnet(1).创建项目:启动vs2017,新建项目,选择Visual C# ->Windows桌面->类库通用windows(2). 修改Com项目:点击 项目->项目属性,再点击应用程序->程序集信息,...
(1).config.php 配置文件<?php /** * RabbitMQ_Config */ $config = [ 'host' => ...
(1).在PHP中可以查看的环境变量包括: (1.1).电脑环境变量 (2.1).服务器环境变量(2).getenv()函数获取一个环境变量的值.参数1是环境变量的key,参数2值为true的时候仅从你的电脑环境变量中查找,参数2值为false会从两种变量中全部查询//获取我电脑登录的用户名,输出A...
在编写多进程的实例中我在每个进程中使用如下代码://调用等待信号的处理器 while (true) { pcntl_signal_dispatch(); }开启5个进程,cpu直接100%修正之后的代码://调用等待信号的处理器 while&...
php7.1引入了PHP异步信号处理函数pcntl_async_signals() 来处理阻塞问题。在php7之前信号处理方式有2种,第一种是基于ticks来每执行一行代码来触发执行信号监听,第二种是直接while(true){ //监听信号 }第一种方式如果某行的代码阻塞时间较长会影响...