eliep/avro-rpc-php-generator

此库基于eliep/avro-rpc-php生成Avro RPC客户端

1.7.7-p2 2016-08-20 23:17 UTC

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