eliep / avro-rpc-php-generator
此库基于eliep/avro-rpc-php生成Avro RPC客户端
1.7.7-p2
2016-08-20 23:17 UTC
Requires
- docopt/docopt: 1.0.*
- eliep/avro-rpc-php: ^1.7.7
- gossi/php-code-generator: ^0.3.2
This package is not auto-updated.
Last update: 2024-09-26 02:08:51 UTC
README
有关Avro及其在PHP中的使用的完整文档,请参阅Avro。
此库使用avro-rpc-php作为PHP中Avro RPC协议的实现。
安装
composer require eliep/avro-rpc-php-generator
协议类生成
脚本位于您的vendor/bin文件夹中
php vendor/bin/generate.php --help
必需参数
- --input (-i) dir : 包含您的Avro协议的文件夹
- --output (-o) dir : 将写入协议类的文件夹
可选参数
- --prefix (-p) namespace: 输出目录的命名空间前缀
- --stringType (-s) : 如果请求者将使用Java实现,使用String而不是CharSequence
- --apcu (-a) : 使用APCu缓存解析的协议。
命名空间
生成脚本将尊重您avro协议中定义的命名空间。例如,如果您将"my.avro"定义为协议命名空间,脚本
- 在由选项-o指定的目录中创建
My\Avro
文件夹。 - 使用
My\Avro
为生成的PHP类。
注意:如果由选项-o指定的目录具有命名空间,您可以使用选项-p指定它,以便生成的PHP类的命名空间使用它。
生成的类名将是协议名称加上Requestor
后缀(如果您的协议名称为Protocol
,则类名为ProtocolRequestor
);
协议类使用
例如,如果您的协议是
{ "namespace": "my.avro", "protocol": "Protocol", "types": [ {"type": "record", "name": "SimpleRequest", "fields": [{"name": "subject", "type": "string"}] }, {"type": "record", "name": "SimpleResponse", "fields": [{"name": "something", "type": "string"}] } ], "messages": { "requestSomething": { "request": [{"name": "message", "type": "SimpleRequest"}], "response": "SimpleResponse" } } }
您可以使用以下方式连接到Avro RPC服务器
use My\Avro\ProtocolRequestor $serverHost = '127.0.0.1'; $serverPort = 1412; try { $requestor = new ProtocolRequestor($serverHost, $serverPort); } catch (\Exception $e) { // unable to reach the server. }
ProtocolRequestor
设置了一个临时错误处理器来检测套接字连接是否工作。如果不工作,构造函数抛出PHP异常。
ProtocolRequestor
类包含一个针对您的协议中每个消息的函数。这些函数接受由相应消息定义的那么多参数。
您可以调用
$response = $requestor->requestSomething(array("subject" => "ping"));
示例
示例在example/文件夹中。
- 启动服务器
php bin/generate.php sample_rpc_server.php
- 使用示例客户端
php bin/generate.php sample_rpc_client.php
- 重新生成示例客户端
php bin/generate.php --input example/avro/ --output example/ --prefix Example --stringType