Swoft 2.x Rpc调用

Swoft框架的初始化

Swoft初始化有六个步骤:

  1. ENV环境文件初始化
  2. 注解信息扫描收集
  3. 配置初始化
  4. 注册类到bean容器
  5. 收集事件监听器
  6. 启动console控制台,启动相应的服务


官方文档

而Rpc作为Swoft提供的基础模块之一,其初始化流程也与框架的初始化一致

Rpc服务调用

Rpc的本质也是一个请求的发送和处理,所以会有发送请求的Client和接收请求的Server,这两者在Swoft中都需要进行Bean容器的注册

Rpc 服务初始化


Rpc Client是发起Rpc请求的客户端,在Swoft中其底层实现是Swoole的协程客户端,即 Swoole\Coroutine\Client, 且Swoft对客户端进行了连接池的实现,每次进行Rpc请求的调用时,无需不断初始化Client,只需要在Rpc Client的连接池中获取Client即可

在Swoft中是以服务的形式来声明不同的功能模块,具体在 /app/bean.php中 声明配置

官方提供了一个user的rpc 服务:

Rpc Client服务配置

Rpc 服务注入

在 /app/Http/Controller/RpcController 中声明并注入配置文件中配置好的Rpc服务

Client启动时,通过控制器当中的接口注解,去访问Rpc服务,所以框架启动时通过代理类解析接口注解,并加载对象到附加容器中,在调用时可以从容器中获取并调用

【注意】 更底层的服务注入和Rpc服务初始化要看 Bean容器初始化及 Rpc 的框架底层源码

具体位置在 /vendor/swoft/bean 及 /vendor/swoft/rpc-client /vendor/swoft/rpc-server

服务编写

服务的具体业务内容编写在 app/Rpc 中,这个在官方文档中有详细介绍

大体流程就是需要先 声明服务接口,然后再实现这个服务接口

官方文档详细介绍

【注意】 当然上述是基于swoft框架的Rpc服务,若调用的是其他系统的rpc,则需要根据事先规定好的rpc协议进行通信

Rpc服务启动

swoft的Rpc服务有单独启动和集成其他服务(http/Websocket)两种方式,无论哪种方式,都需要在 bean.php 中配置Rpc

如图, Rpc服务成功启动

1.Rpc请求过来后,进行dispatch, 触发dispatch

2.在服务分发类中调用 serviceHandle 处理请求

3.加载对应中间件处理请求


​​​​​​​​​​​​​​

4.进行路由匹配,通过获取发送的打包数据,决定调用的接口方法及版本

 

至此一个完整的Rpc请求完成,但是Swoft2.0中并没有提供远程Rpc的服务发现组件,需要手动进行集成和封装

swoole官方文档

协程客户端 https://wiki.swoole.com/#/coroutine_client/init
连接池 https://wiki.swoole.com/#/coroutine/conn_pool
多端口监听 https://wiki.swoole.com/#/server/port


swoft2.0 文档

rpc-server https://www.bookstack.cn/read/swoft-doc-v2.x/rpc-server-index.md
rpc-client https://www.bookstack.cn/read/swoft-doc-v2.x/rpc-client-index.md
 

猜你喜欢

转载自blog.csdn.net/JineD/article/details/120450651
今日推荐