ZeroMQ-based RPC client/server library with MessagePack support.
This was started as a project to fill a need where I wanted an RPC server, wanted to use C++, and wanted to hide the socket connection details. I also wanted to utilize a modern socket library that covered more than just IP, and found ZeroMQ to fit the bill.
In addition, this is a learning project for me to hone my C++ development skills and delve into some more advanced concepts of C++ such as advanced templates and scraping function traits.
Some of the ideas, in particular the approach to binding all kinds of functions in the RPC server, were borrowed from rpclib (/~https://github.com/rpclib/rpclib).
Library | Version | Description | Install command (Ubuntu) |
---|---|---|---|
libzmq | 4.3.2+ | 0MQ base library | apt install libzmq5 |
libzmq-dev | 4.3.2+ | 0MQ development files | apt install libzmq3-dev |
cppzmq | 4.8+ | 0MQ C++ Header-only API | N/A (pulled in cmake) |
msgpack-c | 4.x+ | MessagePack C++ headers | N/A (pulled in cmake) |
Boost | 1.71.0+ | Boost Libraries (header) | apt install libboost-*-dev - chrono - context - filesystem - system - timer |
- Any argument or return value associated with a function must be packable by MsgPack, otherwise you will be unable to package the argument properly for passing between client and server.
- Setup make install in CMake
- Unit testing from the beginning - basic client/server, all ctors, move/copy
- Add gtest suite as testing dependency
- Write unit test to ensure that all workers are used and client blocks until free worker then continues
- Tie into codecov.io
- RPC client/server plus generic class/event publisher
- Easy way to publish generic events as passed in
- Easy way to subscribe to generic events and receive callback when received (how to include generic data?)
- PlantUML class diagrams
- Determine how to return errors; zRPCError is fine, but how to get either error or value out in single 'as' call?