RPC 服务

基于 Swoole 扩展,可以很容易地实现 PHP 之间的网络通信,也可以很好地实现 RPC 服务,推荐学习的 RPC 入门基础框架:

先理解一个图 [RPC]

我们再每次实现一个服务时候,都需要将添加的服务马上注册到发现中心,客户端在发起调用的时候,可以由发现中心进行服务发现,通过指定算法负载到指定的后端服务器当中。

其实内部就是一个网络通信的过程,服务器需要主动告诉发现端 "自己" 的存在,发现端就收到后,就可以确定该服务可用。

开启基础服务

框架实现了服务端基础功能,支持 HTTP,TCP 服务多端口监听,服务不建议使用 UDP 形式进行管理。

设置 config/server.phpports 配置项,添加内置 TCPServer,如下:

  1. <?php
  2. return [
  3. 'listen' => 'http://0.0.0.0:9527',
  4. 'options' => [
  5. 'pid_file' => '',
  6. 'worker_num' => 10,
  7. 'task_worker_num' => 20,
  8. ],
  9. 'ports' => [
  10. [
  11. 'class' => \FastD\Server\TCPServer::class,
  12. 'listen' => 'tcp://127.0.0.1:9528',
  13. ],
  14. ],
  15. ];

开启服务状态上报

服务器状态上报,需要开启一个监控端 Discovery,接受服务器状态的服务器(可以通过 FastD API 框架进行实现),然后编写一个上报状态的进程,订立上报机制,对状态进行定时汇报。

开启发现端和监控端,添加状态上报进程。

  1. return [
  2. 'listen' => 'http://0.0.0.0:9527',
  3. 'options' => [
  4. 'pid_file' => '',
  5. 'worker_num' => 10,
  6. 'task_worker_num' => 20,
  7. ],
  8. 'discovery' => [
  9. 'tcp://127.0.0.1:9888'
  10. ],
  11. 'monitor' => [
  12. 'tcp://127.0.0.1:9889'
  13. ],
  14. 'processes' => [
  15. \FastD\Discovery\Discover::class
  16. ],
  17. 'ports' => [
  18. [
  19. 'class' => \FastD\Server\TCPServer::class,
  20. 'listen' => 'tcp://127.0.0.1:9528',
  21. ],
  22. ],
  23. ];

开启 Discover 进程后,进程会以自动在服务启动后自动上报当前服务状态,间隔1s。

若 monitor 也配置后,那么会在接受请求的时候将调用链,参数,服务等信息一等上报到监控端。