Hyperf 官方写 JsonRpc 的使用 Demo 还是比较清晰的,但是作为一个新手,刚使用的时候,还是不是很明白,这里给初次接触的同学,写一个更精细化的 Demo 。很简单的 Demo ,在官方的例子基础上写的。已经理解 JsonRpc 怎么交互,怎么写代码的兄弟们,就不用继续看了。

首先使用下面命令,创建两个hyperf的项目

composer create-project hyperf/hyperf-skeleton hyperf1
composer create-project hyperf/hyperf-skeleton hyperf2

hyperf1 作为 rpc 的客户端,hyperf2 作为 rpc 的服务端

安装的时候,除了这里需要选择 1 ,其他的都直接按回车键就可以了。

hyperf1 客户端需要完成的代码

app 目录下创建一个 JsonRpc 的目录,在当前目录下创建一个接口 CalculatorServiceInterface 和 一个实现类 CalculatorServiceConsumer,代码如下:

CalculatorServiceInterface.php

<?phpnamespace App\JsonRpc;interface CalculatorServiceInterface
{public function add(int $a, int $b): int;public function reduce(int $a, int $b): int;
}

CalculatorServiceConsumer.php

<?phpnamespace App\JsonRpc;use Hyperf\RpcClient\AbstractServiceClient;class CalculatorServiceConsumer extends AbstractServiceClient implements CalculatorServiceInterface
{/*** 定义对应服务提供者的服务名称* @var string*/protected $serviceName = 'CalculatorService';/*** 定义对应服务提供者的服务协议* @var string*/protected $protocol = 'jsonrpc-http';/*** 两数相加* @param int $a* @param int $b* @return int  $a + $b*/public function add(int $a, int $b): int{return $this->__request(__FUNCTION__, compact('a', 'b'));}/*** 两数相减* @param int $a* @param int $b* @return int $a - $b*/public function reduce(int $a, int $b): int{return $this->__request(__FUNCTION__, compact('a', 'b'));}
}

app/Controller 目录下创建一个 TestController 类,代码如下:

TestController.php

<?phpnamespace App\Controller;use App\JsonRpc\CalculatorServiceInterface;
use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Annotation\AutoController;/*** @AutoController()* Class TestController* @package App\Controller*/
class TestController extends AbstractController
{/*** @Inject()* @var CalculatorServiceInterface*/private $calculatorService;/*** 两树相加* @return int*/public function add(){return $this->calculatorService->add($this->request->query('a', 1), $this->request->query('b', 2));}/*** 两树相减* @return int*/public function reduce(){return $this->calculatorService->reduce($this->request->query('a', 1), $this->request->query('b', 2));}
}

然后在 config/autoload/services.php 中加入如下代码,如果这个文件没有,直接创建即可

<?phpreturn ['consumers' => [[// name 需与服务提供者的 name 属性相同'name' => 'CalculatorService',// 服务接口名,可选,默认值等于 name 配置的值,如果 name 直接定义为接口类则可忽略此行配置,如 name 为字符串则需要配置 service 对应到接口类'service' => App\JsonRpc\CalculatorServiceInterface::class,// 对应容器对象 ID,可选,默认值等于 service 配置的值,用来定义依赖注入的 key'id' => App\JsonRpc\CalculatorServiceInterface::class,// 服务提供者的服务协议,可选,默认值为 jsonrpc-http// 可选 jsonrpc-http jsonrpc jsonrpc-tcp-length-check'protocol' => 'jsonrpc-http',// 负载均衡算法,可选,默认值为 random'load_balancer' => 'random',// 这个消费者要从哪个服务中心获取节点信息,如不配置则不会从服务中心获取节点信息// 这个注释了,我们不配置服务中心
//            'registry' => [
//                'protocol' => 'consul',
//                'address' => 'http://127.0.0.1:9502',
//            ],// 如果没有指定上面的 registry 配置,即为直接对指定的节点进行消费,通过下面的 nodes 参数来配置服务提供者的节点信息'nodes' => [['host' => '127.0.0.1', 'port' => 9502],],// 配置项,会影响到 Packer 和 Transporter'options' => ['connect_timeout' => 5.0,'recv_timeout' => 5.0,'settings' => [// 根据协议不同,区分配置'open_eof_split' => true,'package_eof' => "\r\n",// 'open_length_check' => true,// 'package_length_type' => 'N',// 'package_length_offset' => 0,// 'package_body_offset' => 4,],// 当使用 JsonRpcPoolTransporter 时会用到以下配置'pool' => ['min_connections' => 1,'max_connections' => 32,'connect_timeout' => 10.0,'wait_timeout' => 3.0,'heartbeat' => -1,'max_idle_time' => 60.0,],],]],
];

然后在 config/autoload/dependencies.php 文件中写入如下代码

<?phpdeclare(strict_types=1);
/*** This file is part of Hyperf.** @link     https://www.hyperf.io* @document https://hyperf.wiki* @contact  group@hyperf.io* @license  https://github.com/hyperf/hyperf/blob/master/LICENSE*/
return [App\JsonRpc\CalculatorServiceInterface::class => App\JsonRpc\CalculatorServiceConsumer::class
];

至此,我们的 hyperf1 作为客户端的代码就完成了,启动应用,继续写服务端的代码

hyperf2 服务端需要完成的代码

继续在服务端的 app 目录下创建一个 JsonRpc 的目录,在当前目录下创建一个接口 CalculatorServiceInterface 和 一个实现类 CalculatorService,代码如下:

CalculatorServiceInterface.php

<?phpnamespace App\JsonRpc;interface CalculatorServiceInterface
{public function add(int $a, int $b): int;public function reduce(int $a, int $b): int;
}

CalculatorService.php

<?phpnamespace App\JsonRpc;use Hyperf\RpcServer\Annotation\RpcService;/*** @RpcService(name="CalculatorService", protocol="jsonrpc-http", server="jsonrpc-http", publishTo="consul")* Class CalculatorService* @package App\JsonRpc*/
class CalculatorService implements CalculatorServiceInterface
{/*** 两数相加* @param int $a* @param int $b* @return int*/public function add(int $a, int $b): int{return $a + $b;}/*** 两数相减* @param int $a* @param int $b* @return int*/public function reduce(int $a, int $b): int{return $a - $b;}
}

然后在 config/autoload/server.php 中加入如下代码

<?php// ...其他代码return ['mode' => SWOOLE_PROCESS,'servers' => [// ...其他代码['name' => 'jsonrpc-http','type' => Server::SERVER_HTTP,'host' => '0.0.0.0','port' => 9502,'sock_type' => SWOOLE_SOCK_TCP,'callbacks' => [SwooleEvent::ON_REQUEST => [Hyperf\JsonRpc\HttpServer::class, 'onRequest'],],]],// ...其他代码
];

好了,我们的 hyperf2 作为服务端的代码也就这么多了,启动应用

访问 http://127.0.0.1:9501/test/add?a=2&b=3 就能看到结果了

简单的操作基本就这么多了,其他更深的业务,大家慢慢探索吧!

如果当前的代码有什么遗漏,或者跑不起来,可以联系我。有什么需要改正的,可以留言给我;有用的话,点个赞 [手动抱拳]

Hyperf初体验-JsonRpc的使用相关推荐

  1. Hyperf 初体验-ab压测

    关于什么是 Hyperf ,直接去 Hyperf 官网查看吧. 总之一句话:Hyperf 是基于 Swoole 4.3+ 实现的高性能.高灵活性的 PHP 协程框架 言归正传,我们就来先安装下 Hyp ...

  2. 苹果电脑安装python3密码_mac系统安装Python3初体验

    前沿 对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7. 1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 ...

  3. MapReduce编程初体验

    需求:在给定的文本文件中统计输出每一个单词出现的总次数 第一步: 准备一个aaa.txt文本文档 第二步: 在文本文档中随便写入一些测试数据,这里我写入的是 hello,world,hadoop he ...

  4. 小程序 缩放_缩放流星应用程序的初体验

    小程序 缩放 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor Ap ...

  5. wxWidgets刚開始学习的人导引(3)——wxWidgets应用程序初体验

    wxWidgets刚開始学习的人导引全文件夹   PDF版及附件下载 1 前言 2 下载.安装wxWidgets 3 wxWidgets应用程序初体验 4 wxWidgets学习资料及利用方法指导 5 ...

  6. 用鸿蒙跑了个 “hello world”!鸿蒙开发初体验

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源 | https://my.oschina.net/u ...

  7. Windows Embedded Standard开发初体验(二)

    支持Silverlight的Windows Embedded Standard 好了,完成安装之后,我们就可以来做Windows Embedded Standard的第一个操作系统镜像了.在开始菜单中 ...

  8. 深度探索Hyperledger技术与应用之超级账本初体验(附部署代码)

    2019独角兽企业重金招聘Python工程师标准>>> 本章零基础地介绍了如何快速体验超级账本搭建的区块链网络,我们先绕过了比较复杂的初始化配置,用官方提供的fabric-sampl ...

  9. Spring环境搭建,IoC容器初体验~

    由于最近的任务是关于IoC配置文件格式的转换,所以需要从Spring的IoC容器开始学起,今天根据网上的介绍搭建了Spring环境,并对其IoC容器进行了初体验.文章中涉及到的软件以及推荐的一本关于S ...

  10. 来自新手Banana Pi香蕉派初体验

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 一段时间来对有强大的技术支持和完善的社区的Raspberry Pi很感兴趣,本想入一片学习学习,但转念一想Raspb ...

最新文章

  1. suse的安装命令zypper,类似apt
  2. Windows句柄表学习笔记 —— 句柄表全局句柄表
  3. window中osmnx包的详细安装过程
  4. Open*** 安装脚本
  5. 今天,Google 在中国终于光明正大地搞 AI 了!
  6. 递归 —— 作为全局变量 vs 作为参数
  7. 三种方法教你如何在 Mac 上检查磁盘空间使用情况
  8. JS拖动技术--- 关于setCapture
  9. 如何迈出客户拜访的第一步
  10. linux运行火车头采集,网站抓取精灵火车采集器如何定时自动运行?
  11. python实现文件上传
  12. EJB是什么,什么是EJB
  13. php 监听 扫描枪,Android监听扫描枪内容(一)
  14. 【小白】【新手向】Hexo+Github搭建个人博客
  15. MP中的条件更新操作
  16. 原生javascript实现星级评价功能
  17. opencv图像合成
  18. 月薪过2w的IT程序员都是怎么做到的?
  19. PPG测量心率和血氧的方法——原理版
  20. 企业管理者谦虚_为什么谦虚是优秀开发者最重要的特征

热门文章

  1. 匹配滤波器结合Matlab实现
  2. 产品读书《定位:有史以来对美国营销影响最大的观念》
  3. python制作自动交易软件排名_A股股票自动化交易软件的使用和简易说明书,根据多年经验使用python开发...
  4. Linux编译并更新内核(替换Linux内核)
  5. 小米平板5 pro 解锁 Bootloader
  6. SXWIN7X64EN_20181104_NET_msu_LITE英文精简版
  7. 摩尔斯电码对照表—Morse code
  8. 混音师的混音之道|处理母带和混音的差别?母带处理的真相(上)|MZD Studios
  9. 4K 对齐与固态硬盘检测工具
  10. IIS7安装URLReWrite的妙用