tomaz-rup / sf-thrift-plugin
symfony 1.x Apache Thrift 插件
Requires
This package is auto-updated.
Last update: 2024-09-29 05:09:24 UTC
README
这是一个简单的 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 项目网站的示例
-
创建
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) } -
为PHP生成UserStorage服务文件
thrift --gen php UserStorage.thrift
-
将生成的文件移动到正确的位置(例如lib/thrift文件夹)
-
从生成的文件中删除
include ...行 -
使用客户端
$service = new UserStorageClient(ThriftProtocolFactory::factory()); $service->store($user); $user2 = $service->retrieve(1);