php实现rpc简单的方法
rpc是啥这不多解释,php扩展实现rpc
yar是鸟哥的写的扩展,实现简单的rpc.比较很好理解
windows安装yar
http://pecl.php.net/package/yar/2.0.4/windows
下载扩展,安装即可
<?php class Test
{
public function Hello()
{
return 'Hello world';
}
} $service = new Yar_Server(new Test);
$service->handle();
<?php
$client = new Yar_Client('http://localhost:8888/server.php');
$res = $client->Hello();
var_dump($res);
用Yar扩展实现RPC
RPC (Remote Procedure Call),远程过程调用。是一种进程间通信技术,允许程序像调用本地方法一样调用远程服务。
RPC屏蔽了数据打包、网络通信的细节,使得使用者只需要关注于服务调用,而服务调用又像调用本地方法一样自然。
PHP有个Yar扩展,提供了RPC服务端和客户端的功能。
1. 安装
$ pecl install yar
1
稍候片刻,即可装好。
然后在php.ini中加入如下一行:
extension=yar.so
1
2.Yar介绍
目前只需要关注Yar提供的两个类就行了:Yar_Server和Yar_Client。
2.1 Yar_Server
Yar_Server提供了创建RPC服务端相关的功能。该类大致如下:
Yar_Server {
/* 属性 */
protected $_executor ;
/* 方法 */
final public __construct (Object $obj)
public boolean handle (void)
}
__construct 方法接收一个对象,创建一个RPC服务,该对象的public方法便可由RPC客户端调用
handle 方法用于启动RPC服务
使用方式如下:
$server = new Yar_Server(new Service());
$server->handle();
1
2
2.2 Yar_Client
Yar_Client提供了创建RPC客户端相关的功能。该类大致如下:
Yar_Client {
/* 属性 */
protected $_protocol ;
protected $_uri ;
protected $_options ;
protected $_running ;
/* 方法 */
public void __call (string $method , array $parameters)
final public __construct (string $url)
public boolean setOpt (number $name , mixed $value)
}
__construct 方法的参数是RPC服务端对应的URL
使用方式如下:
$client = new Yar_Client("http://....");
$result = $client->someMethod($arg0, $arg1); // 调用RPC服务端中相应对象的 someMethod方法
1
2
Yar扩展的更多介绍见: http://php.net/manual/zh/book.yar.php
3. 使用示例
下面是一个在PHP框架中使用Yar创建RPC服务,然后在脚本中调用的例子。
3.1 RPC服务端
3.1.1 RPC服务类
该类是RPC服务的实际提供者。Service.php
<?php
namespace app\agent\lib;
class Service
{
public function __constrict()
{
}
public function add($a, $b)
{
return $a + $b;
}
public function sub($a, $b)
{
return $a - $b;
}
}
3.1.2 RPC包装类
用Yar扩展将上面的Service类包装成RPC服务。Rpc.php
<?php
namespace app\agent\controller;
use app\agent\lib\Service;
class Rpc extends \think\Controller
{
public function _initialize()
{
parent::_initialize();
}
public function index()
{
$rpcServer = new \Yar_Server(new Service());
$rpcServer->handle();
}
}
该RPC服务的访问路径是:
http://localhost/agent/rpc/index
1
用浏览器访问:http://localhost/agent/rpc/index:
默认情况下配置yar.expose_info是开着的,安全起见,把它关闭。
yar.expose_info = Off
1
3.2 RPC客户端
RPC客户端如下(rpc.php):
<?php
$client = new Yar_Client("https://localhost/agent/rpc/index");
try {
$result = $client->add(1, 5); // 调用RPC服务端提供的add方法
echo "result=", $result, PHP_EOL;
} catch (Exception $e) {
echo "Exception: ", $e->getMessage();
}
3.3 测试结果
命令行中运行RPC客户端:
$ php rpc.php
1
输出如下:
result=6
1
说明调用成功。
php实现rpc简单的方法的更多相关文章
- go-micro开发RPC服务的方法及其运行原理
go-micro是一个知名的golang微服务框架,最新版本是v4,这篇文章将介绍go-micro v4开发RPC服务的方法及其运作原理. 基本概念 go-micro有几个重要的概念,后边开发RPC服 ...
- MySQL笔记-最简单的方法来解决找不到mysqld.sock文件的问题
首先,环境:ubuntu 14.04,采用apt-get的方式安装的,手动安装可能路径设置稍有区别. 1.安装MySQL后,用命令行首次启动时发现找不到Mysqld.sock文件,提示: ERROR ...
- mfc显示静态图片最简单的方法
一致都是研究如何调用opencv显示动态图片,但是很多时候在显示图标的时候,都是需要显示静态图片,现在将最简单的方法总结下: 1.添加picture控件 2.添加资源,要求为bmp 3.修改属性 结果 ...
- ECshop设置301最快捷最简单的方法
ECshop设置301最快捷最简单的方法 在 init.php中加入以下代码 if (strtolower($_SERVER['SERVER_NAME'])!='www.fz1688.com') { ...
- git 的简单使用方法
git 的简单使用方法1. 服务器 安装完成2. ssh 中的账号创建完成3. 创建 ssh 账号,会在 ssh 的安装目录下的home 目录里面,多了用户家目录4. 进入该目录 ,创建一个新的文件夹 ...
- JavaScript,一个超级简单的方法判断浏览器的内核前缀
先说明,此处的方法是说超级简单的方法,不是指代码超级少,而是用非常简单的知识点,只要懂得怎么写JavaScript的行内样式就可以判断. 大家应该还记得JavaScript行内样式怎么写吧?(看来我是 ...
- NET MVC1项目升级到MVC2最简单的方法
NET MVC1项目升级到MVC2最简单的方法 把MVC1项目升级到MVC2,最简单的做法如下: 新建MVC2项目 新建一个MVC2项目,把原来MVC1的项目文件全部拷贝到新建MVC2项目目录里,依照 ...
- js 获取当天23点59分59秒 时间戳 (最简单的方法)
js 获取当天23点59分59秒 时间戳 (最简单的方法) new Date(new Date(new Date().toLocaleDateString()).getTime()+24*60*60* ...
- [ASP.NET]更简单的方法:FormsAuthentication登录ReturnUrl使用绝对路径
转自:http://www.cnblogs.com/dudu/p/formsauthentication-returnurl-absoluteuri.html [ASP.NET]更简单的方法:Form ...
随机推荐
- [MGR——Mysql的组复制之多主模式 ] 详细搭建部署过程
组复制可以在两种模式下运行. 1.在单主模式下,组复制具有自动选主功能,每次只有一个 server成员接受更新.2.在多主模式下,所有的 server 成员都可以同时接受更新. 组复制与异步主从复 ...
- 将oracle10g 升级至10.2.0.4
http://blog.csdn.net/launch_225/article/details/7221489 一.单实例环境,全时长一个半钟多. 详细图文说明到这下载 1.停止所有oracle相关进 ...
- SQL 主机
SQL 主机 SQL 主机 如果您想要您的网站存储数据在数据库并从数据库显示数据,您的 Web 服务器必须能使用 SQL 语言访问数据库系统. 如果您的 Web 服务器托管在互联网服务提供商(ISP, ...
- Android 官方博客 - Android应用程序的内存分析(翻译)(转)
转自:http://www.cnblogs.com/wisekingokok/archive/2011/11/30/2245790.html Dalvik虚拟机支持垃圾收集,但是这不意味着你可以不用关 ...
- 解决Install failed uid changed
出现此问题的原因大多是apk冲突造成,解决的办法如下: 将apk相关文件和相关内容删除 (1) 将手机root,Window上装root大师等工具root成功率较高 (2) 删除可能相关的文件:/da ...
- Selenium 工具介绍、安装、配置及使用
概念 selenium是一款跨平台开源工具,用于web的功能完整性測试,想做压力測试的能够换软件了 先看一眼官方站 http://docs.seleniumhq.org/download/ 首先要FQ ...
- [IT学习]Python pandas 学习
今天学习pandas来处理数据,结果用python 3.5.0的shell来调试,总是报错. 报错中包含如下字样: Traceback (most recent call last): File &q ...
- Poisson distribution 泊松分布 指数分布
Poisson distribution - Wikipedia https://en.wikipedia.org/wiki/Poisson_distribution Jupyter Notebook ...
- vc字符串转换处理:(绝对精华,收集所有的例子)
vc字符串转换处理:(绝对精华,收集所有的例子) 1.头文件中要定义宏; #define UNICODE #define _UNICODE //////////// ...
- ABAP 邮件
function zint_send_email.*"-------------------------------------------------------------------- ...