tomasz-rup/sf-thrift-plugin

symfony 1.x Apache Thrift plugin

Installs: 4

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 2

Forks: 0

Open Issues: 0

Type:symfony1-plugin

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

This package is auto-updated.

Last update: 2024-10-29 05:28:33 UTC


README

StyleCI

A simple symfony 1.x Apache Thrift plugin. Base for other Thrift plugins.

Installation

  • Install the plugin

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

Configuration

  • 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

Connectors

  • 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

Transports

  • 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.

Protocols

  • 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.

Use

  • 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());

More Thrift services

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'));

Example

This is example from Thrift project site:

  1. 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)
    }
    
  2. Generate UserStorage service files for PHP:

    thrift --gen php UserStorage.thrift
  3. Move generated files to proper place (like lib/thrift folder)

  4. Remove include ... lines from generated files

  5. Use client:

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