mirror of
https://github.com/valitydev/thrift.git
synced 2024-11-07 02:45:22 +00:00
31 lines
1.7 KiB
Markdown
31 lines
1.7 KiB
Markdown
|
This directory contains some glue code to allow Thrift RPCs to be sent over
|
||
|
ZeroMQ. Included are client and server implementations for Python and C++,
|
||
|
along with a simple demo interface (with a working client and server for
|
||
|
each language).
|
||
|
|
||
|
Thrift was designed for stream-based interfaces like TCP, but ZeroMQ is
|
||
|
message-based, so there is a small impedance mismatch. Most of issues are
|
||
|
hidden from developers, but one cannot be: oneway methods have to be handled
|
||
|
differently from normal ones. ZeroMQ requires the messaging pattern to be
|
||
|
declared at socket creation time, so an application cannot decide on a
|
||
|
message-by-message basis whether to send a reply. Therefore, this
|
||
|
implementation makes it the client's responsibility to ensure that ZMQ_REQ
|
||
|
sockets are used for normal methods and ZMQ_DOWNSTREAM sockets are used for
|
||
|
oneway methods. In addition, services that expose both types of methods
|
||
|
have to expose two servers (on two ports), but the TZmqMultiServer makes it
|
||
|
easy to run the two together in the same thread.
|
||
|
|
||
|
This code was tested with ZeroMQ 2.0.7 and pyzmq afabbb5b9bd3.
|
||
|
|
||
|
To build, simply install Thrift and ZeroMQ, then run "make". If you install
|
||
|
in a non-standard location, make sure to set THRIFT to the location of the
|
||
|
Thrift code generator on the make command line and PKG_CONFIG_PATH to a path
|
||
|
that includes the pkgconfig files for both Thrift and ZeroMQ. The test
|
||
|
servers take no arguments. Run the test clients with no arguments to
|
||
|
retrieve the stored value or with an integer argument to increment it by
|
||
|
that amount.
|
||
|
|
||
|
This code is not quite what I would consider production-ready. It doesn't
|
||
|
support all of the normal hooks into Thrift, and its performance is
|
||
|
sub-optimal because it does some unnecessary copying.
|