php使用Yar实现RPC调用
Yar轻量级、可串行也可并行、可通过get方法查看接口列表和注释,只需要把接口信息整理好,就能在查看接口的时候同时查看接口文档了。
Yar是啥
安装
git clone https://github.com/laruence/yar.git
phpize
./configure
make & make install// 安装成功后,在php.ini中添加extension=yar.so,重启fpm即可
php服务端代码
<?php
// this is a yar server
Class Api{/** * this is a comments* api documents writes here*/ function add($a,$b){return $a+$b; } function mult($a,$b){return $a*$b;} protected function _add(){return 'this can\'t be seen by client';}
} $server = new Yar_Server(new Api());
$server->handle();
php客户端代码
<?php
$server_url = 'http://www.ruisicake.com/server.php';// yar版本
echo 'YAR_VERSION='.YAR_VERSION.'<br>';
// yar打包工具
echo 'YAR_OPT_PACKAGER='.YAR_OPT_PACKAGER.'<br>';
// yar超时时间
echo 'YAR_OPT_TIMEOUT='.YAR_OPT_TIMEOUT.'<br>';
// yar连接超时时间
echo 'YAR_OPT_CONNECT_TIMEOUT='.YAR_OPT_CONNECT_TIMEOUT.'<br>';
echo "<br>";/* 串行调用示例 */
// 创建一个yar客户端
$client = new Yar_Client($server_url);// $client->SetOpt(YAR_OPT_CONNECT_TIMEOUT,2000);
// $client->SetOpt(YAR_OPT_PACKAGER,YAR_PACKAGER_PHP);// 调用服务端接口
var_dump($client->add(1,2));
var_dump($client->mult(1,2));var_dump($client->_add());
// 因为服务端_add函数是protected所以会报错:
`Fatal error: Yar_Client::__call(): unsupported packager msgpack in /usr/share/nginx/html/cake/client.php on line 9`/* 并行调用示例 */
function callback_success($retval,$info){echo "<br>";var_dump($retval); echo "<br>";var_dump($info);echo "<br>";echo "<br>";
} function callback_error($type, $error, $info){echo "<br>";var_dump($type);echo "<br>";var_dump($error);echo "<br>";var_dump($info);echo "<br>";echo "<br>";
} function callback_continue(){echo '如果在loop中指定了callback,那么在所有并行请求发送完毕后,yar会调用一次此函数。而且,当call中没有指定具体的回调函数时,call执行完毕后会再次调用此函数。';echo "<br>";
} // call1
Yar_Concurrent_Client::call($server_url,'add',array(10,10));
// call2
Yar_Concurrent_Client::call($server_url,'mult',array(10,10),'callback_success');
// call3
Yar_Concurrent_Client::call($server_url,'_add',array(1,3),'callback_success','callback_error',array(YAR_OPT_PACKAGER=>'php'));
// call4
Yar_Concurrent_Client::call($server_url,'_add',array(1,4),'callback_success','callback_error');// loop1
Yar_Concurrent_Client::loop('callback_continue','callback_error');
// loop2
// Yar_Concurrent_Client::loop();
- 如果在loop中指定了默认回调函数,那么在所有并行请求发送完毕后,yar会调用一次此回调。如loop1
- 当call中没有指定回调,loop中也没有指定回调的时候,不执行任何回调,只返回结果。如call1+loop2
- 当call中没有指定回调,loop指定默认回调的时候,此时call默认将loop中指定的回调作为默认回调。如call1+loop1,会执行两次回调
- 并行中可独立为客户端指定配置,用array传入配置参数
php使用Yar实现RPC调用相关推荐
- 通过 yar 初识RPC
laruence/yar: Light, concurrent RPC framework for PHP & C 鸟哥的轻量级可支持并发的 rpc 框架,基于此初识 RPC 的工作原理,及其 ...
- Yar的RPC的应用-php
RPC,即 Remote Procedure Call(远程过程调用),调用远程计算机上的服务,就像调用本地服务一样.RPC可以很好的解耦系统.RPC 可基于 HTTP 或 TCP 协议,Web Se ...
- RabbitMQ (五)实现类似Dubbo的RPC调用
springboot对rabbitMQ的接口做了封装,要实现 request/reponse 模式的调用,只需要调用 rabbitTemplate.convertSendAndReceive 方法即可 ...
- 深入剖析通信层和RPC调用的异步化(上)
<Netty 进阶之路>.<分布式服务框架原理与实践>作者李林锋深入剖析通信层和 RPC 调用的异步化.李林锋此后还将在 InfoQ 上开设 Netty 专题持续出稿,感兴趣的 ...
- RPC调用框架比较分析--转载
原文地址:http://itindex.net/detail/52530-rpc-%E6%A1%86%E6%9E%B6-%E5%88%86%E6%9E%90 什么是RPC: RPC(Remote P ...
- rpc 调用webservice怎样传递参数_五分钟让你了解RPC原理详解
欢迎关注专栏[以架构赢天下]--每天持续分享Java相关知识点 以架构赢天下zhuanlan.zhihu.com 以架构赢天下--持续分享Java相关知识点 每篇文章首发此专栏 欢迎各路Java程序 ...
- 为什么SOFA RPC调用30s还不超时?
简介:为什么SOFA RPC调用30s还不超时? 1. 背景 最近帮客户处理了一个诡异的RPC调用问题,想跟大家分享一下.关于SOFA RPC,请参考官网[1]. 2. 问题现象 客户使用 REST ...
- 开发中的坑:MQ 也能做 RPC 调用?
hi, 大家好,我是 haohongfan. 最近浏览 帖子[1] 的时候看到一个有意思的吐槽. 大概意思是架构师没有选用 RPC 框架来做服务间调用,而选择用 MQ 来代替.是不是很意外? 当然不出 ...
- php rpc调用,PHP 通过 JSON-RPC 调用实现以太坊交互
PHP 通过 JSON-RPC 调用实现以太坊交互 由 hubwiz 创建于2年前, 最后更新于 2年前 版本号 #1 6262 views 0 likes 0 collects 自去年以来,我们正在 ...
- RPC调用框架比较分析
什么是RPC: RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 简言之,RPC ...
最新文章
- 轻量级WEB开发框架flask
- HDLBits 系列(1)从HDLBits中获取灵感,整顿自己,稳步前行
- java 多线程 day12 读写锁
- Leetcode 91. 解码方法 (每日一题 20211013)
- 我的心得:数据中心运维管理(一)
- 从0到100——知乎架构变迁史
- 日月神话_常见的Java神话
- 【游戏开发】Excel表格批量转换成CSV的小工具
- 并发控制中存在问题及解决方案
- triz矛盾矩阵_怎样利用项目TRIZ矛盾定义法,突破产品“创
- Quartus 与 ModelSim 联合仿真详细步骤
- 在计算机里面建一个新的文档,电脑上的word怎么新建文档
- C++“准”标准库Boost学习指南(3):Boost.Utility
- VC++实现禁止上网
- ODT,ZQ校准,OCT,TDQS
- 台式计算机亮度设置,怎么调台式电脑亮度_怎么调台式电脑的亮度
- android的前景
- 曹国伟:微博客将改变媒体发展形态
- 【NLP】第1章 什么是Transformers?
- 机器学习/算法面试笔记1——损失函数、梯度下降、优化算法、过拟合和欠拟合、正则化与稀疏性、归一化、激活函数
热门文章
- 2021-2027全球与中国卸扣式绝缘子市场现状及未来发展趋势
- 网传程序员加班猝死,当事人:我还在写代码
- 关于【正点原子STM32F1开发指南】第五章delay.c文件里fac_us=SystemCoreClock/8000000的保姆级详解
- Godaddy创始人:成就亿万富翁的10条规则
- katacontainers启动分析
- 固态加装机械计算机不显示,win10不显示机械硬盘怎么办_win10加装机械硬盘不显示的解决方法...
- 领域驱动设计实践(战术篇)
- 虚拟机快照,移除和删除使用方法
- 数据安全--11--数据安全政策文件体系
- C++ 侯捷视频学习(草稿)