Swoft Rpc调用(一) Rpc服务初始化

Swoft框架的初始化

Swoft初始化有六个步骤

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

官方文档

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

Rpc服务调用

G6vdcF.png

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服务配置
    GcCdc6.png
    GcCa1x.png

  • Rpc 服务注入

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

GciOmT.png

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

【注意】 更底层的服务注入和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

GcZFoT.png

如图, Rpc服务成功启动
GceknI.png

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Zbr0Wvt-1586228034322)(https://s1.ax1x.com/2020/04/07/Gcet4U.png)]

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

Gce7Uf.png

  1. 加载对应中间件处理请求
    Gcm0JS.png

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

GcmBRg.png

Gcm6Ln.png


至此一个完整的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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值