tomaz-rup/sf-thrift-plugin

symfony 1.x Apache Thrift 插件

安装: 4

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony1-plugin

dev-master 2018-12-31 22:08 UTC

This package is auto-updated.

Last update: 2024-09-29 05:09:24 UTC


README

StyleCI

这是一个简单的 symfony 1.x Apache Thrift 插件。是其他 Thrift 插件的基类。

安装

  • 安装插件

    $ composer require tomasz-rup/sf-thrift-plugin

配置

  • 配置文件在 app.yml 中

    all:
      thrift_plugin:
        default:
          connector:
            class: TSocket
            param:
              host: 127.0.0.1
              port: 9090
          transport:
            class: TBufferedTransport
          protocol:
            class: TBinaryProtocol

连接器

  • THttpClient

    HTTP 客户端

    参数

    • host [必需] 连接到的主机
    • port [可选,默认: 80] 要连接的端口
    • uri [可选,默认: ''] 要请求的 URI
    • scheme [可选,默认: 'http'] 请求使用的方案,即 http、https
    • timeout [可选,默认: null] 读取超时
  • TMemoryBuffer

    内存缓冲区是一个传输,它简单地从内存字符串缓冲区中读取和写入。每次调用 write 时,数据都会简单地放入缓冲区,每次调用 read 时,都会从该缓冲区读取数据。

    参数

    • buf [可选,默认: ''] 初始缓冲区值
  • TPhpStream

    PHP 流传输。从 php://input 和 php://output 标准流读取并写入

    参数

    • mode [必需]
  • TServerSocket

    参数

    • host [可选,默认: 'localhost'] 监听的主机
    • port [可选: 默认: 9090] 监听的端口
  • TSocket

    参数

    • host [可选,默认: 'localhost'] 远程主机名
    • port [可选,默认: 9090] 远程端口
    • persist [可选,默认: false] 是否使用持久套接字
    • send_timeout [可选,默认: 100] 毫秒级的发送超时
    • recv_timeout [可选,默认: 750] 毫秒级的接收超时
  • TSocketPool

    参数

    • hosts [可选,默认: array('localhost')] 远程主机名列表
    • ports [可选 default: array(9090)] 远程端口列表,或单个公共端口
    • persist [可选,默认: false] 是否使用持久套接字
    • send_timeout [可选,默认: 100] 毫秒级的发送超时
    • recv_timeout [可选,默认: 750] 毫秒级的接收超时

传输

  • TBufferedTransport

    缓冲传输。将数据存储到内部缓冲区,直到调用 flush 才实际写入。对于读取,我们进行贪婪读取,然后从内部缓冲区提供服务数据。

    参数

    • read_buf_size [可选,默认: 512] 接收缓冲区大小
    • write_buf_size [可选,默认: 512] 写入缓冲区大小
  • TFramedTransport

    分帧传输。以带长度戳的数据块写入和读取数据。

    参数

    • read [可选,默认: false] 读取数据缓冲区。
    • write [可选,默认: false] 队列输出数据缓冲区。
  • TNullTransport

    只接受写入并忽略它们的传输。这对于测量结构的序列化大小很有用。

协议

  • TBinaryProtocol

    二进制协议。

    参数

    • strict_read [可选,默认: false]
    • strict_write [可选,默认: true]
  • TBinaryProtocolAccelerated

    加速的二进制协议。

    参数

    • strict_read [可选,默认: false]
    • strict_write [可选,默认: true]
  • TCompactProtocol

    紧凑协议。

使用

  • 生成文件

    thrift --gen php example.thrift
  • 将生成的文件复制到您的项目 lib 目录

  • 从生成的文件中删除 include ...

  • 创建客户端对象

    $service = new example_serviceClient(ThriftProtocolFactory::factory());

更多 Thrift 服务

我们可以创建多个命名的配置

all:
  thrift_plugin:
    # First service configuration
    service1:
      connector:
        class: TSocket
        param:
          host: 127.0.0.1
          port: 9090
      transport:
        class: TBufferedTransport
      protocol:
        class: TBinaryProtocol
    # Second service configuration
    service2:
      connector:
        class: TSocket
        param:
          host: 192.168.1.1
          port: 9091
      transport:
        class: TFramedTransport
      protocol:
        class: TBinaryProtocolAccelerated

现在我们可以使用它了

$service1 = new FirstClient(ThriftProtocolFactory::factory('service1'));
$service2 = new SecondClient(ThriftProtocolFactory::factory('service2'));

示例

这是来自 Thrift 项目网站的示例

  1. 创建 UserStorage.thrift 文件

    struct UserProfile {
      1: i32 uid,
      2: string name,
      3: string blurb
    }
    service UserStorage {
      void store(1: UserProfile user),
      UserProfile retrieve(1: i32 uid)
    }
    
  2. 为PHP生成UserStorage服务文件

    thrift --gen php UserStorage.thrift
  3. 将生成的文件移动到正确的位置(例如lib/thrift文件夹)

  4. 从生成的文件中删除 include ...

  5. 使用客户端

    $service = new UserStorageClient(ThriftProtocolFactory::factory());
    $service->store($user);
    $user2 = $service->retrieve(1);