php中rpc框架如何使用?

1次阅读

phprpc需借助第三方库实现,核心是封装远程调用细节;推荐Hyperf RPC或goaPHP,laravel项目可用laravel-rpc;需定义统一接口契约、启动服务端并注册方法、客户端通过代理类调用,注意超时、重试与服务发现。

php中rpc框架如何使用?

PHP 中 RPC 框架不是 PHP 原生内置的,需要借助第三方库或自建通信机制来实现远程过程调用。核心思路是:把本地函数调用“伪装”成对远端服务的调用,框架负责序列化参数、网络传输、反序列化响应、错误处理等细节。

选一个轻量易上手的 RPC 框架

推荐从 Hyperf RPCGoaPHP(基于 swoole 入手,它们对 PHP 开发者友好,文档较全,且支持协程提升并发能力。如果项目已用 Laravel,可考虑 Laravel RPC(如 laravel-rpc 包),它通过 Artisan 命令生成客户端/服务端 stub,集成较顺滑。

  • Hyperf 默认使用 jsON-RPC over http 或 TCP,也支持 gRPC(需额外扩展)
  • 纯传统 PHP-FPM 项目可用 xml-RPC(内置 ext/xmlrpc)或 json-RPC 2.0(用 phpjsonrpc 库)
  • 不建议从零手写 socket + 序列化,容易出错且难维护

定义接口与服务契约

RPC 强依赖清晰的接口约定。通常先写一个 interface(如 UserServiceInterface),声明方法签名(参数类型、返回类型),服务端和客户端共用同一份契约代码或生成对应 stub。

  • 例如:public function getUserById(int $id): Array;
  • Hyperf 中可通过注解 @RpcService(name="UserService", protocol="jsonrpc-http") 绑定实现类
  • gRPC 场景下需先写 .proto 文件,再用 protoc 生成 PHP 类

启动服务端并注册方法

以 Hyperf 为例,新建一个 Service 类,实现接口,并打上 RPC 注解;然后在配置中开启 RPC Server(如 jsonrpc-http 监听 9504 端口)。

php中rpc框架如何使用?

MixPHP3.0.27

MixPHP 是一个 PHP 命令行模式开发框架;基于 Vega 驱动的 HTTP 可以同时支持 Swoole、WorkerMan、FPM、CLI-Server 生态,并且可以无缝切换;V3 是一个高度解耦的版本,整体代码基于多个独立的模块构建,即便用户不使用我们的脚手架,也可以使用这些独立模块,并且全部模块都支持原生开发。例如:你可以只使用 mix/vega 来搭配 laravel orm 使用

php中rpc框架如何使用? 12

查看详情 php中rpc框架如何使用?

立即学习PHP免费学习笔记(深入)”;

  • 确保服务端能被客户端网络访问(注意防火墙docker 网络、域名解析)
  • 启用服务发现(如 consul / etcd)可让客户端自动找到服务实例,适合多节点部署
  • 简单测试可用 curl 直接发 JSON-RPC 请求:curl -X POST http://127.0.0.1:9504 -d '{"jsonrpc":"2.0","method":"UserService::getUserById","params":[1],"id":1}'

客户端调用就像调本地函数

客户端引入相同接口,通过框架提供的代理类(proxy)或客户端实例调用。框架在背后完成编码、发请求、收响应、解码全过程。

  • Hyperf 中注入 UserInterface 即可直接调用 $this->userInterface->getUserById(1)
  • 若用纯 Guzzle 手动调,需自己拼 JSON-RPC 请求体、处理 id 匹配、异常状态码,不推荐
  • 记得加超时和重试(Hyperf 默认支持 @CircuitBreaker@Retry 注解)

基本上就这些。关键不是“怎么装包”,而是理清服务拆分边界、统一接口定义、做好错误透传和链路追踪。RPC 在 PHP 中不复杂,但容易忽略序列化兼容性、版本升级、超时设置这些细节。

text=ZqhQzanResources