Yar轻量级、可串行也可并行、可通过get方法查看接口列表和注释,只需要把接口信息整理好,就能在查看接口的时候同时查看接口文档了。

Yar是啥

轻量级、并行php RPC框架,只支持php程序之间的相互调用。
优点:轻量级、可串行也可并行、可通过get方法查看接口列表和注释,只需要把接口信息整理好,就能在查看接口的时候同时查看接口文档了。
缺点:不支持跨语言调用。

安装

git clone https://github.com/laruence/yar.git
phpize
./configure
make & make install// 安装成功后,在php.ini中添加extension=yar.so,重启fpm即可

./configure报错
configure: error: Please reinstall the libcurl distribution - easy.h in <curl-dir>/include/curl/
需要安装apt-get install libcurl4-gnutls-dev

yar支持php、json和Msgpack三种打包工具,默认是php,如果要用Msgpack的话要先安装Msgpack扩展,然后配置时加上--enable-msgpack参数。但实际使用中发现,php的serialize和msgpack的效率几乎差不太多,甚至serialize性能还要好一点点,不过serialize所占的空间要稍大一些,个人认为没有必要用msgpack。

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();

有一些细节需要注意:

  1. 如果在loop中指定了默认回调函数,那么在所有并行请求发送完毕后,yar会调用一次此回调。如loop1
  2. 当call中没有指定回调,loop中也没有指定回调的时候,不执行任何回调,只返回结果。如call1+loop2
  3. 当call中没有指定回调,loop指定默认回调的时候,此时call默认将loop中指定的回调作为默认回调。如call1+loop1,会执行两次回调
  4. 并行中可独立为客户端指定配置,用array传入配置参数

官方文档--phpWeb 服务

php使用Yar实现RPC调用相关推荐

  1. 通过 yar 初识RPC

    laruence/yar: Light, concurrent RPC framework for PHP & C 鸟哥的轻量级可支持并发的 rpc 框架,基于此初识 RPC 的工作原理,及其 ...

  2. Yar的RPC的应用-php

    RPC,即 Remote Procedure Call(远程过程调用),调用远程计算机上的服务,就像调用本地服务一样.RPC可以很好的解耦系统.RPC 可基于 HTTP 或 TCP 协议,Web Se ...

  3. RabbitMQ (五)实现类似Dubbo的RPC调用

    springboot对rabbitMQ的接口做了封装,要实现 request/reponse 模式的调用,只需要调用 rabbitTemplate.convertSendAndReceive 方法即可 ...

  4. 深入剖析通信层和RPC调用的异步化(上)

    <Netty 进阶之路>.<分布式服务框架原理与实践>作者李林锋深入剖析通信层和 RPC 调用的异步化.李林锋此后还将在 InfoQ 上开设 Netty 专题持续出稿,感兴趣的 ...

  5. RPC调用框架比较分析--转载

    原文地址:http://itindex.net/detail/52530-rpc-%E6%A1%86%E6%9E%B6-%E5%88%86%E6%9E%90 什么是RPC:  RPC(Remote P ...

  6. rpc 调用webservice怎样传递参数_五分钟让你了解RPC原理详解

    欢迎关注专栏[以架构赢天下]--每天持续分享Java相关知识点 以架构赢天下​zhuanlan.zhihu.com 以架构赢天下--持续分享Java相关知识点 每篇文章首发此专栏 欢迎各路Java程序 ...

  7. 为什么SOFA RPC调用30s还不超时?

    简介:为什么SOFA RPC调用30s还不超时? 1. 背景 最近帮客户处理了一个诡异的RPC调用问题,想跟大家分享一下.关于SOFA RPC,请参考官网[1]. 2. 问题现象 客户使用 REST ...

  8. 开发中的坑:MQ 也能做 RPC 调用?

    hi, 大家好,我是 haohongfan. 最近浏览 帖子[1] 的时候看到一个有意思的吐槽. 大概意思是架构师没有选用 RPC 框架来做服务间调用,而选择用 MQ 来代替.是不是很意外? 当然不出 ...

  9. php rpc调用,PHP 通过 JSON-RPC 调用实现以太坊交互

    PHP 通过 JSON-RPC 调用实现以太坊交互 由 hubwiz 创建于2年前, 最后更新于 2年前 版本号 #1 6262 views 0 likes 0 collects 自去年以来,我们正在 ...

  10. RPC调用框架比较分析

    什么是RPC: RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. 简言之,RPC ...

最新文章

  1. 轻量级WEB开发框架flask
  2. HDLBits 系列(1)从HDLBits中获取灵感,整顿自己,稳步前行
  3. java 多线程 day12 读写锁
  4. Leetcode 91. 解码方法 (每日一题 20211013)
  5. 我的心得:数据中心运维管理(一)
  6. 从0到100——知乎架构变迁史
  7. 日月神话_常见的Java神话
  8. 【游戏开发】Excel表格批量转换成CSV的小工具
  9. 并发控制中存在问题及解决方案
  10. triz矛盾矩阵_怎样利用项目TRIZ矛盾定义法,突破产品“创
  11. Quartus 与 ModelSim 联合仿真详细步骤
  12. 在计算机里面建一个新的文档,电脑上的word怎么新建文档
  13. C++“准”标准库Boost学习指南(3):Boost.Utility
  14. VC++实现禁止上网
  15. ODT,ZQ校准,OCT,TDQS
  16. 台式计算机亮度设置,怎么调台式电脑亮度_怎么调台式电脑的亮度
  17. android的前景
  18. 曹国伟:微博客将改变媒体发展形态
  19. 【NLP】第1章 什么是Transformers?
  20. 机器学习/算法面试笔记1——损失函数、梯度下降、优化算法、过拟合和欠拟合、正则化与稀疏性、归一化、激活函数

热门文章

  1. 2021-2027全球与中国卸扣式绝缘子市场现状及未来发展趋势
  2. 网传程序员加班猝死,当事人:我还在写代码
  3. 关于【正点原子STM32F1开发指南】第五章delay.c文件里fac_us=SystemCoreClock/8000000的保姆级详解
  4. Godaddy创始人:成就亿万富翁的10条规则
  5. katacontainers启动分析
  6. 固态加装机械计算机不显示,win10不显示机械硬盘怎么办_win10加装机械硬盘不显示的解决方法...
  7. 领域驱动设计实践(战术篇)
  8. 虚拟机快照,移除和删除使用方法
  9. 数据安全--11--数据安全政策文件体系
  10. C++ 侯捷视频学习(草稿)