先说windows客户端的安装
yar扩展下载地址:https://pecl.php.net/package/yar
下载对应的版本

点击DLL可以查看支持的PHP版本,我本地是phpstudy搭建的环境,php版本是7.19.nts
所以我下载了7.1 Non Thread Safe (NTS) x64
解压后里面的php_yar.dll和php_yar.pdb文件放到对应的php版本ext下面
我的是D:\phpstudy_pro\Extensions\php\php7.1.9nts\ext
然后修改php.ini文件增加 extension=php_yar.dll
php.ini文件可以从phpstudy设置中打开对应版本配置文件
重启phpstudy就安装完成了

linux的安装:

安装yar要先装msgpack
安装msgpack
首先进入~目录
find / -name phpize //查看phpize文件位置 我的是 /www/server/php/71/bin/phpize
使用 wegt或者curl下载msgpack
wegt http://pecl.php.net/get/msgpack-2.0.2.tgz  或者 curl -O http://pecl.php.net/get/msgpack-2.0.2.tgz
tar -xzvf msgpack-2.0.2.tgz //解压文件
cd msgpack-2.0.2 //进入目录
/www/server/php/71/bin/phpize //输入自己的phpize路径
./configure --with-php-config=/www/server/php/71/bin/php-config //设置编译配置 我的是/www/server/php/71/bin/php-config
make && make install //开始编译
安装完成后会有个文件位置提示,我的是/www/server/php/71/lib/php/extensions/no-debug-non-zts-20200315
查看自己目录下面是否有msgback.so
修改php.ini文件最后添加extension=/www/server/php/71/lib/php/extensions/no-debug-non-zts-20200315/msgback.so安装yar
首先进入~目录
cd
find / -name phpize //查看phpize文件位置 我的是 /www/server/php/71/bin/phpize
使用 wegt或者curl下载yar 我的服务器php版本也是7.1的所以下载也是2.0.5的
wegt http://pecl.php.net/get/yar-2.0.5.tgz  或者 curl - O http://pecl.php.net/get/yar-2.0.5.tgz
tar -xzvf yar-2.0.5.tgz //解压文件
cd yar-2.0.5 //进入目录
/www/server/php/71/bin/phpize //输入自己的phpize路径
./configure --with-php-config=/www/server/php/71/bin/php-config //设置编译配置 我的是/www/server/php/71/bin/php-config
make && make install //开始编译
安装完成后会有个文件位置提示,我的是/www/server/php/71/lib/php/extensions/no-debug-non-zts-20200315
查看自己目录下面是否有yar.so
修改php.ini文件最后添加extension=/www/server/php/71/lib/php/extensions/no-debug-non-zts-20200315/yar.so
重启PHP就安装完成了

使用:
服务端是linux的,本地是客户端是windows
服务端安装了tp5.0,直接在index目录测试
新建RpcServer.php文件,用来做控制

<?phpnamespace app\index\controller;/*** rpc基类(服务端)*/
class RpcServer
{//秘钥protected $key ='约定好的秘钥';//生成签名public function getSign($arr){if(empty($arr)){return false;}//去除数组中的空值$arr = array_filter($arr);//如果数组中有签名删除签名if(isset($arr['sing'])){unset($arr['sing']);}//按照键名字典排序ksort($arr);//生成URL格式的字符串$str = http_build_query($arr)."&key=".$this->key;$str = $this->arrToUrl($str);return  strtoupper(md5($str));}//获取签名 待签名的数组public function setSing($arr){$arr['sing'] = $this->getSign($arr);return $arr;}//URL解码为中文public function arrToUrl($str){return urldecode($str);}//验证签名public function checkSing($arr, $form_sing){//获取签名$sing = $this->getSign($arr);if($sing == $form_sing){return true;} else {return false;}}
}

然后要开放访问的Test.php文件

<?phpnamespace app\index\controller;class Testextends RpcServer
{//因为tp自动访问index要不会有报错public function index() {//return 12312;}/*** Add two operands* @param interge * @return interge*/public function add($a, $b, $c) {//验证签名if ($this->checkSing([$a,$b], $c)) {return $this->_add($a, $b);} else {return '签名错误';}}/*** Protected methods will not be exposed* @param interge * @return interge*/protected function _add($a, $b) {return $a + $b;}
}$server = new \Yar_Server(new Test());
$server->handle();

服务端就算弄好了,访问对应控制器后显示的是

然后是客户端,同样是tp5.0
新建RpcClient.php文件

<?phpnamespace app\index\controller;/*** rpc基类(客户端)*/
class RpcClient
{//秘钥private $sign_key ='约定的秘钥';private $callBack;private $callNum = 0;/*** 调用服务端接口* @param  $server      Api server* @param  $api         接口* @param  $params      参数* @param  $openSign    开启签名* @param  $callBack    回调*/ public function call($server,$api,$params,$openSign=false,$callBack=null){if($openSign){$params['sign'] = $this->getSign($params);}if($callBack === null){$client = new \Yar_Client($server);return call_user_func_array([$client,$api], $params);}$this->callNum ++;$this->callBack = $callBack;return \Yar_Concurrent_Client::call($server,$api,$params,array($this, 'ApiClientCallBack'));}/*** 执行并发调用*/public function loop(){return \Yar_Concurrent_Client::loop([$this,'callback_first'],[$this,'error_callback']); }/*** 并发调用回调* @param  $retval* @param  $callinfo*/public function ApiClientCallBack($retval,$callinfo){    if($callinfo === null){return $this->callBack($retval,$callinfo);}static $data = array();$data[] = $retval; //并发if(count($data) == $this->callNum){$fn = $this->callBack;return $this->$fn($data,$callinfo);}}// public function callback_first($retval, $callinfo){if ($callinfo == NULL) {echo "现在, 所有的请求都发出去了, 还没有任何请求返回\n";} else {echo "这是一个远程调用的返回, 调用的服务名是", $callinfo["method"], ". 调用的sequence是 " , $callinfo["sequence"] , "\n";var_dump($retval);}}// 异常回调public function error_callback($type, $error, $callinfo){error_log(json_encode(func_get_args() ),3,'rpc.log' );}//生成签名public function getSign($arr){//去除数组中的空值$arr = array_filter($arr);//如果数组中有签名删除签名if(isset($arr['sing'])){unset($arr['sing']);}//按照键名字典排序ksort($arr);//生成URL格式的字符串$str = http_build_query($arr)."&key=".$this->sign_key;$str = $this->arrToUrl($str);return  strtoupper(md5($str));}
}

实际发送访问发送请求的文件Test.php

<?phpnamespace app\index\controller;use app\common\controller\Frontend;/*** 会员中心*/
class Test extends RpcClient
{   public function testRpc(){//同步$client = new \yar_client("服务端地址/index/test");$ret = $client->add(1,2);//可以调用服务端控制器下的方法var_dump($ret);exit();//异步并发$api = '服务端地址/index/test';$this->call($api,'add',[1,2],true,'callback');$this->call($api,'add',[3,4],true,'callback');$this->call($api,'add',[5,6],true,'callback');$this->loop();return false;}// 回调数据public function callback($data,$callinfo){echo "<pre>";echo "data:";//异步返回的参数var_dump($data);echo "callinfo:";//调用的方法var_dump($callinfo);}
}

这样访问testRpc方法就可以调用服务端控制器下的方法了

最新yar扩展安装和使用相关推荐

  1. php yar 扩展,php的基于yaf+yar+yac环境搭建

    php项目基于yaf+yar+yac环境搭建 具体配置步骤(尽量缩短文字描述): 1.php的yaf扩展安装: **      pecl install   yaf   ** 将   extensio ...

  2. Ubuntu 下安装 Yar 扩展遇到的问题以及解决方案

    本文为原创,转载请注明出处. 昨天在ubuntu上安装完yar之后发现yar还是不能用,感觉有些不对劲. 通过在微博上请教 @Laruence 大神和公司的大大之后,问题解决了,下面就来分享这一成果. ...

  3. 最新!如何安装Google浏览器扩展

    最新!如何安装Google浏览器扩展 安装Google浏览器扩展是非常简单的,首先点击浏览器右上方的按钮 - 选择更多工具 - 最后点击扩展程序. 点击扩展程序后就会进入扩展程序管理界面,也可以直接在 ...

  4. mongodb php linux,mongodb 及PHP的MongoDB 扩展安装

    Install MongoDB https://www.mongodb.org/downloads 第一种 通用二进制包安装 curl -O https://fastdl.mongodb.org/li ...

  5. ffpemg扩展 安装php_ThinkSwoole 教程(二)安装

    Swoole 是 PHP 的一个扩展,因此安装 Swoole 本质上就是安装一个 PHP 扩展.Swoole 仅支持 Linux.FreeBSD.MacOS 三种操作系统. 安装准备 安装前必须保证系 ...

  6. PHP的swoole扩展安装方法详细教程

    这篇文章主要为大家分享了PHP的swoole扩展安装方法详细教程,具有实用性和参考价值,感兴趣的小伙伴们可以参考一下 Swoole支持PHP 5.3.10以上版本,所以安装Swoole之前请先安装PH ...

  7. postgresql定义访问ip与用户_Postgresql-12.1最新版本在线安装以及配置使用全流程

    Postgresql-12.1最新版本在线安装以及配置使用全流程 Postgresql-12.1简单介绍 PostgreSQL 12.1 已经发布,该版本在各方面都得到了加强,包括显著地提升查询性能, ...

  8. swoole php 使用教程,Swoole 扩展安装与使用入门

    Swoole 扩展安装与使用入门 由 学院君 创建于2年前, 最后更新于 1年前 版本号 #3 37642 views 13 likes 5 collects Swoole 概述 Swoole 是面向 ...

  9. safari扩展安装_如何安装和管理Safari 5扩展

    safari扩展安装 While there have been hacks to include extensions in Safari for some time now, Safari 5 n ...

  10. 最全EduSoho开源版安装教程4:常见EduSoho扩展安装教程

    本文是目前最全面.最细致的EudSoho官方教程,包含EduSoho在各种操作系统安装的方法,以及一些常见问题的解决方法,将持续更新,希望能帮助大家快速转型线上,实现在线教育! mbstring扩展安 ...

最新文章

  1. 关于使用strtok的一个小问题
  2. centos 升级cmake from 2.* to 3.*
  3. 首个生物医疗开放大数据研究中心在沪成立
  4. .NETFramework-Web.Mvc:ActionResult
  5. 无需安装Oracle,直接使用PL/SQL的方法
  6. k近邻算法C++二维情况下的实现
  7. Access denied for user 'root'@'localhost' (using password: YES) 问题解决小记
  8. Java 内部类 和 匿名内部类
  9. Java基础学习总结(46)——JAVA注解快速入门
  10. 打字方式异于常人,可能脑子有病丨AI研究
  11. day4-Python学习笔记(七)函数与模块
  12. 【svn】svn分支(branch)如何同步主干(trunk)的代码?
  13. 分区助手克隆linux,PartAssist 9.1+7.0 AOMEI 分区助手 免安装版 (简/繁/英 PE/Win 通用)...
  14. 生成QQ/MSN/旺旺/SKYPE等在线状态图标
  15. 概率论与数理统计(6):数理统计的基本概念
  16. 深入分析Zookeeper的Leader选举原理
  17. 如何在eclipse中建立一个安卓工程
  18. python中fabs函数_Python fabs() 函数 - Python 教程 - 自强学堂
  19. armbian开启ssh_armbian笔记
  20. 通过1688APP分享商品链接淘口令获取商品详情接口,淘口令返利接口,1688淘口令API接口,淘口令解析接口,1688短链接接口接入方案

热门文章

  1. 值得收藏:程序员必去的社区与网站
  2. Address Sanitizer(Asan)原理及实战定位
  3. python之jieba分词库
  4. php的变量命名规则
  5. java oracle spool,Oracle 数据导出工具 Spool | 学步园
  6. 超五类网线与六类网线水晶头为什么不可通用
  7. python爬虫抓取,免费高匿快代理 IP
  8. UnityShder法线贴图
  9. oracle左连接应用场景,Oracle左连接left join 的实际操作与应用
  10. java 字体变形_字符串变形-Java