最新yar扩展安装和使用

article/2025/9/26 6:31:05

先说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方法就可以调用服务端控制器下的方法了


http://chatgpt.dhexx.cn/article/cjb12isw.shtml

相关文章

yarn使用简介

yarn简介&#xff1a; yarn是facebook发布的一款取代npm的包管理工具。 yarn的特点&#xff1a; 速度超快。Yarn 缓存了每个下载过的包&#xff0c;所以再次使用时无需重复下载。 同时利用并行下载以最大化资源利用率&#xff0c;因此安装速度更快。超级安全。 在执行代码之前…

yar安装使用

1.安装 pecl install yar vim /etc/php.ini 加上extensionyar.so 查看支持的配置&#xff1a; php --re yar - Dependencies { Dependency [ json (Required) ] } - INI { Entry [ yar.packager <PERDIR> ] //打包协议 Current php } …

phpstudy安装yar扩展

最近因为项目需要yar扩展&#xff0c;本地开发环境使用phpstudy搭建&#xff0c;yar不是phpstudy的常用扩展&#xff0c;无法在扩展列表里面找到&#xff0c;所以需要自己安装。 0x01 Yar(Yet Another RPC framework for PHP) 是一个轻量级, 高效的RPC框架, 它提供了一种简单…

Yarn基本介绍(一)

1、简介 Yarn是Hadoop的分布式资源调度平台&#xff0c;负责为集群的运算提供运算资源。如果把分布式计算和单个计算机对应的话&#xff0c;HDFS就相当于计算机的文件系统&#xff0c;Yarn就是计算机的操作系统&#xff0c;MapReduce就是计算机上的应用程序。 2、组成部分 Y…

使用yaf+yar实现基于http的rpc服务

什么是RPC RPC&#xff0c;全称是Remote Procedure Call&#xff0c;远程服务调用&#xff0c;是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的协议。简单一点来理解就是网络上的一个节点请求另一个节点提供的服务。 什么是YAF Yaf&#x…

yaf yar微服务/hprose微服务 镜像初始化 —— k8s从入门到高并发系列教程 (四)

前面的教程已经在docker镜像 软件 层面上初步安装了企业常用的插件&#xff0c;但目前还没有写任何代码。本教程带你初始化yaf框架&#xff0c;并基于yar框架和hprose跨语言微服务框架打包两个微服务代码&#xff0c;在容器间调用。 yaf是一个用c语言写的&#xff0c;用于php项…

YAR 并行RPC框架研究

前几天,部门召开了PHP技术峰会 学习会议,大家分别对这次会议的PPT 做了简单的介绍, 其中提到了 鸟哥【惠新辰】的一篇PPT《微博LAMP 演变》,如果谁有需要可以去谷歌搜,或者去 http://www.laruence.com/2013/08/15/2913.html 他的博客去看一下,我就不提供下载链接了。 …

Yarn概述

Yarn Yarn是Hadoop的分布式资源调度平台&#xff0c;负责为集群的运算提供运算资源。如果把分布式计算机和单个计算机相对应的话&#xff0c;HDFS就相当于计算机的文件系统&#xff0c;Yarn就是计算机的操作系统&#xff0c;MapReduce就是计算机上的应用程序。 Yarn的基本组成…

Yarn介绍

Yarn介绍 一&#xff0c;介绍二&#xff0c; yarn 框架三&#xff0c;ResourceManager3.1&#xff0c;ApplicationsManager3.2&#xff0c;Scheduler 四&#xff0c;NodeManager五&#xff0c;ApplicationMaster六&#xff0c;客户端提交任务到yarn中运行的流程。 YARN的基本思…

Yarn

应用场景 当部署好hadoop集群后,搭建了YARN集群,开启了hadoop的HDFS和YARN服务,访问主节点IP和8088端口的YARN监控界面,发现这个All Applications界面中的开始执行时间和结束执行时间不对,应该往后加8个小时才对,导致在页面中对任务监控的时候容易出错,所以现在要进行修…

Yar 搭建 RPC 服务

一、安装 Yar pecl install yar pecl install msgpack 二、确保 php 加载 yar 模块 php -m 三、编写服务器端 Server.php &#xff0c; 在浏览器打开 http://.../Server.php 可见API的介绍如下 <?phpclass API {public function some_method($parameter, $options &…

[Yar] yar安装与使用过程中遇到问题总结

yar安装与使用过程中遇到问题总结 Yar 简介官方文档yar安装yar运行时的默认配置yar常量使用范例遇到的问题应用流程 Yar 简介 Yar 是一个轻量级, 高效的RPC框架, 它提供了一种简单方法来让PHP项目之间可以互相远程调用对方的本地方法. 并且Yar也提供了并行调用的能力. 可以支持…

PHP封装curd,ThinkPHP5.0的模型CURD创建Create操作

模型的主要功能包括数据处理和业务逻辑&#xff0c;而这些都离不开数据的CURD操作&#xff0c;因此我们首先来谈下数据的CURD操作&#xff0c;在掌握了数据库Db类的用法后&#xff0c;模型的CURD操作就会很容易理解&#xff0c;因为本质上模型的CURD操作最终调用的还是Db类的操…

浅谈CURD系统和CRQS系统

浅谈CURD系统和CRQS系统 在网上看到关于这个内容的介绍&#xff0c;就想着自己整理一下&#xff0c;方便观看。 三层架构 先从三层架构开始讲&#xff0c;三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑…

Vue入门之Web端CURD前端项目示例

Vue入门之Web端CURD前端项目示例 随着vue.js越来越火&#xff0c;很多不太懂前端的小伙伴想要入坑。而入坑最好的办法就是上手实际操作&#xff0c;因此本文将重点放在实际操作上&#xff0c;对理论不做过多解释&#xff0c;不明白的地方小伙伴们可以去看官方文档或者相关书籍…

fastadmin一键生成CURD

1.登录后台以后安装在线命令插件 2.CRUD fastadmin自带一个test表可以用来测试&#xff0c;或者是自己在数据库随便新建一个表也行 自定义模块名这样填的话就是在admin->controller下->新建一个名为test文件夹 只写test的话是在 controller 目录下面 然后点击生成命令行…

php跨域curd,SpringBoot+Vue前后端分离(CURD)Demo

我发现我好久没有更新了&#xff0c;写一篇证明我还活着。 既然是前后端分离的话&#xff0c;肯定是要有前端和后端的。 这里前端我使用的VueElementUI,后端采用的是SpringBootMybatisSwagger2。 下面的话&#xff0c;我就做一个简单的Demo吧。 写的不好&#xff0c;请大家各位…

单表CURD操作

该项目纯粹用 Servlet 编写&#xff0c;理解跳转过程。理解原理..... 一、准备数据库脚本 USE test;DROP TABLE IF EXISTS dept;CREATE TABLE dept (deptno int(2) NOT NULL,dname varchar(14) DEFAULT NULL,loc varchar(13) DEFAULT NULL,PRIMARY KEY (DEPTNO) ) ENGINEInnoD…

Avue-curd个性化定制

在使用vue(js)elelment(ui)开发一些后台管理项目的时候&#xff0c;基本会用到 列表页&#xff0c;条件搜索(search),表格数据(table),分页&#xff0c;操作栏的&#xff0c;增、删、改、查几种操作。如下图这样的&#xff1a; 很多的页面都很类似&#xff0c;这里就给大家介绍…

Python简单CURD

python Python的注释模块 python变量 格式化输出 转义字符 与 数据类型 控制台输入 实体类 Student.dy class Emp:def __init__(self,id,name,age,sex,sal):self.id idself.name nameself.age ageself.sex sexself.sal saldef __str__(self):return "学号&#xf…