A simple symfony 1.x Apache Thrift plugin. Base for other Thrift plugins.
-
Install the plugin
$ composer require tomasz-rup/sf-thrift-plugin
-
Configuration is in 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 client
Params:
- host [required] The host to connect to
- port [optional, default: 80] The port to connect on
- uri [optional, default: ''] The URI to request
- scheme [optional, default: 'http'] The scheme to use for the request, i.e. http, https
- timeout [optional, default: null] Read timeout
-
TMemoryBuffer
A memory buffer is a tranpsort that simply reads from and writes to an in-memory string buffer. Anytime you call write on it, the data is simply placed into a buffer, and anytime you call read, data is read from that buffer.
Params:
- buf [optional, default: ''] Initial buffer value
-
TPhpStream
Php stream transport. Reads to and writes from the php standard streams php://input and php://output
Params:
- mode [required]
-
TServerSocket
Params:
- host [optional, default: 'localhost'] Host to listen on
- port [optional: default: 9090] Port to listen on
-
TSocket
Params:
- host [optional, default: 'localhost'] Remote hostname
- port [optional: default: 9090] Remote port
- persist [optional, default: false] Whether to use a persistent socket
- send_timeout [optional, default: 100] Send timeout in milliseconds
- recv_timeout [optional, default: 750] Recv timeout in milliseconds
-
TSocketPool
Params:
- hosts [optional, default: array('localhost')] List of remote hostnames
- ports [optional default: array(9090)] List of remote ports, or a single common port
- persist [optional, default: false] Whether to use a persistent socket
- send_timeout [optional, default: 100] Send timeout in milliseconds
- recv_timeout [optional, default: 750] Recv timeout in milliseconds
-
TBufferedTransport
Buffered transport. Stores data to an internal buffer that it doesn't actually write out until flush is called. For reading, we do a greedy read and then serve data out of the internal buffer.
Params:
- read_buf_size [optional, default: 512] The receive buffer size
- write_buf_size [optional, default: 512] The write buffer size
-
TFramedTransport
Framed transport. Writes and reads data in chunks that are stamped with their length.
Params:
- read [optional, default: false] Buffer for read data.
- write [optional, default: false] Buffer for queued output data
-
TNullTransport
Transport that only accepts writes and ignores them. This is useful for measuring the serialized size of structures.
-
TBinaryProtocol
Binary protocol.
Params:
- strict_read [optional, default: false]
- strict_write [optional, default: true]
-
TBinaryProtocolAccelerated
Accelerated binary protocol.
Params:
- strict_read [optional, default: false]
- strict_write [optional, default: true]
-
TCompactProtocol
Compact protocol.
-
Generate files
thrift --gen php example.thrift
-
Copy those generated files to your project lib directory
-
Remove
include ...
lines from generated files -
Create a client object:
$service = new example_serviceClient(ThriftProtocolFactory::factory());
We can create many named configurations:
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
Now we can use it:
$service1 = new FirstClient(ThriftProtocolFactory::factory('service1'));
$service2 = new SecondClient(ThriftProtocolFactory::factory('service2'));
This is example from Thrift project site:
-
Create
UserStorage.thrift
file:struct UserProfile { 1: i32 uid, 2: string name, 3: string blurb } service UserStorage { void store(1: UserProfile user), UserProfile retrieve(1: i32 uid) }
-
Generate UserStorage service files for PHP:
thrift --gen php UserStorage.thrift
-
Move generated files to proper place (like lib/thrift folder)
-
Remove
include ...
lines from generated files -
Use client:
$service = new UserStorageClient(ThriftProtocolFactory::factory()); $service->store($user); $user2 = $service->retrieve(1);