Using Thrift with Perl

Thrift requires Perl >= 5.10.0

Unexpected exceptions in a service handler are converted to TApplicationException with type INTERNAL ERROR and the string of the exception is delivered as the message.

On the client side, exceptions are thrown with die, so be sure to wrap eval{} statments around any code that contains exceptions.

Please see tutoral and test dirs for examples.

The Perl ForkingServer ignores SIGCHLD allowing the forks to be reaped by the operating system naturally when they exit. This means one cannot use a custom SIGCHLD handler in the consuming perl implementation that calls serve(). It is acceptable to use a custom SIGCHLD handler within a thrift handler implementation as the ForkingServer resets the forked child process to use default signal handling.

Dependencies

The following modules are not provided by Perl 5.10.0 but are required to use Thrift.

Runtime

Test

This is only required when running tests:

HttpClient Transport

These are only required if using Thrift::HttpClient:

SSL/TLS

These are only required if using Thrift::SSLSocket or Thrift::SSLServerSocket:

Breaking Changes

0.10.0

The socket classes were refactored in 0.10.0 so that there is one package per file. This means use Socket; no longer defines SSLSocket. You can use this technique to make your application run against 0.10.0 as well as earlier versions:

eval { require Thrift::SSLSocket; } or do { require Thrift::Socket; }

0.11.0

If you need a single version of your code to work with both older and newer thrift namespace changes, you can make the new, correct namespaces behave like the old ones in your files with this technique to create an alias, which will allow you code to run against either version of the perl runtime for thrift:

BEGIN {*TType:: = *Thrift::TType::}

If you need to modify your code to work against both older or newer thrift versions, you can deal with these changes in a backwards compatible way in your projects using eval:

eval { require Thrift::Exception; require Thrift::MessageType; require Thrift::Type; } or do { require Thrift; }

Deprecations

0.11.0

Thrift::HttpClient setRecvTimeout() and setSendTimeout() are deprecated. Use setTimeout instead.