Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hyperf/jet
🚀 Jet is a unification model RPC Client, built-in JSON RPC protocol, available to running in ALL PHP environments, including PHP-FPM and Swoole/Hyperf environments.
https://github.com/hyperf/jet
Last synced: 3 days ago
JSON representation
🚀 Jet is a unification model RPC Client, built-in JSON RPC protocol, available to running in ALL PHP environments, including PHP-FPM and Swoole/Hyperf environments.
- Host: GitHub
- URL: https://github.com/hyperf/jet
- Owner: hyperf
- License: mit
- Created: 2020-08-09T17:15:14.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-01-11T07:50:27.000Z (10 months ago)
- Last Synced: 2024-10-03T12:56:54.274Z (about 1 month ago)
- Language: PHP
- Homepage:
- Size: 76.2 KB
- Stars: 57
- Watchers: 6
- Forks: 6
- Open Issues: 0
-
Metadata Files:
- Readme: README-CN.md
- License: LICENSE
Awesome Lists containing this project
- awesome-swoole - hyperf/jet
README
[English](./README.md) | 中文
# Jet, by Hyperf
Jet 是一个统一模型的 RPC 客户端,内置 JSONRPC 协议的适配,该组件可适用于所有的 PHP 环境,包括 PHP-FPM 和 Swoole 或 Hyperf。(在 Hyperf 环境下,目前仍建议直接使用 `hyperf/json-rpc` 组件来作为客户端使用)
> 未来还会内置 gRPC 和 Tars 协议。
# 安装
```bash
composer require hyperf/jet
```# 快速开始
## 注册协议
> 注册协议不是必须的一个步骤,但您可以通过 ProtocolManager 管理所有的协议。
您可以通过 `Hyperf\Jet\ProtocolManager` 类来注册管理任意的协议,每个协议会包含 Transporter, Packer, DataFormatter and PathGenerator 几个基本的组件,您可以注册一个 JSONRPC 协议,如下:
```php
new StreamSocketTransporter(),
ProtocolManager::PACKER => new JsonEofPacker(),
ProtocolManager::PATH_GENERATOR => new PathGenerator(),
ProtocolManager::DATA_FORMATTER => new DataFormatter(),
]);
```## 注册服务
> 注册服务不是必须的一个步骤,但您可以通过 ServiceManager 管理所有的服务。
在您往 `Hyperf\Jet\ProtocolManager` 注册了一个协议之后,您可以通过 `Hyperf\Jet\ServiceManager` 将协议绑定到任意的服务上,如下:
```php
[
[$host = '127.0.0.1', $port = 9503],
],
]);
```
// 如果需要使用 Consul 服务
```php
new StreamSocketTransporter(),
ProtocolManager::PACKER => new JsonEofPacker(),
ProtocolManager::PATH_GENERATOR => new PathGenerator(),
ProtocolManager::DATA_FORMATTER => new DataFormatter(),
ProtocolManager::NODE_SELECTOR => new NodeSelector($this->host, $this->port, $config),
]);
```## 调用 RPC 方法
### 通过 ClientFactory 调用
在您注册完协议与服务之后,您可以通过 `Hyperf/Jet/ClientFactory` 来获得您的服务的客户端,如下所示:
```php
create($service = 'CalculatorService', $protocol = 'jsonrpc');
```当您拥有 client 对象后,您可以通过该对象调用任意的远程方法,如下:
```php
// 调用远程方法 `add` 并带上参数 `1` 和 `2`
// $result 即为远程方法的返回值
$result = $client->add(1, 2);
```当您调用一个不存在的远程方法时,客户端会抛出一个 `Hyperf\Jet\Exception\ServerException` 异常。
### 通过自定义客户端调用
您可以创建一个 `Hyperf\Jet\AbstractClient` 的子类作为自定义的客户端类,来完成远程方法的调用,比如,您希望定义一个 `CalculatorService` 服务的 `jsonrpc` 协议的客户端类,您可以先定义一个 `CalculatorService` 类,如下所示:
```php
host, $transporter->port] = $nodeSelector->selectRandomNode($service, 'jsonrpc');
// Specific the packer here, you could also retrieve the packer from ProtocolManager or passing by constructor.
$packer = new JsonEofPacker();
parent::__construct($service, $transporter, $packer, $dataFormatter, $pathGenerator);
}
}
```现在,您可以通过该类来直接调用远程方法了,如下所示:
```php
// 调用远程方法 `add` 并带上参数 `1` 和 `2`
// $result 即为远程方法的返回值
$client = new CalculatorService();
$result = $client->add(1, 2);
```