README.md
1This directory contains some glue code to allow Thrift RPCs to be sent over
2ZeroMQ. Included are client and server implementations for Python and C++,
3along with a simple demo interface (with a working client and server for
4each language).
5
6Thrift was designed for stream-based interfaces like TCP, but ZeroMQ is
7message-based, so there is a small impedance mismatch. Most of issues are
8hidden from developers, but one cannot be: oneway methods have to be handled
9differently from normal ones. ZeroMQ requires the messaging pattern to be
10declared at socket creation time, so an application cannot decide on a
11message-by-message basis whether to send a reply. Therefore, this
12implementation makes it the client's responsibility to ensure that ZMQ_REQ
13sockets are used for normal methods and ZMQ_DOWNSTREAM sockets are used for
14oneway methods. In addition, services that expose both types of methods
15have to expose two servers (on two ports), but the TZmqMultiServer makes it
16easy to run the two together in the same thread.
17
18This code was tested with ZeroMQ 2.0.7 and pyzmq afabbb5b9bd3.
19
20To build, simply install Thrift and ZeroMQ, then run "make". If you install
21in a non-standard location, make sure to set THRIFT to the location of the
22Thrift code generator on the make command line and PKG_CONFIG_PATH to a path
23that includes the pkgconfig files for both Thrift and ZeroMQ. The test
24servers take no arguments. Run the test clients with no arguments to
25retrieve the stored value or with an integer argument to increment it by
26that amount.
27
28This code is not quite what I would consider production-ready. It doesn't
29support all of the normal hooks into Thrift, and its performance is
30sub-optimal because it does some unnecessary copying.
31
32Deprecation notice:
33Csharp is not a supported Apache Thrift target anymore. Instead netstd is the
34recommended replacement. This code is left "as is" for educational purposes
35unless someone converts it to netstd
36