You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
If you're looking for a similar library with support for JSON-RPC and async operations, check out packio.
Overview
rpclib is a RPC library for C++, providing both a client and server implementation. It is built using modern C++14, and as such, requires a recent compiler. Main highlights:
Expose functions of your program to be called via RPC (from any language
implementing msgpack-rpc)
Call functions through RPC (of programs written in any language)
No IDL to learn
No code generation step to integrate in your build, just C++
Look&feel
Server
#include<iostream>
#include"rpc/server.h"voidfoo() {
std::cout << "foo was called!" << std::endl;
}
intmain(int argc, char *argv[]) {
// Creating a server that listens on port 8080
rpc::server srv(8080);
// Binding the name "foo" to free function foo.// note: the signature is automatically captured
srv.bind("foo", &foo);
// Binding a lambda function to the name "add".
srv.bind("add", [](int a, int b) {
return a + b;
});
// Run the server loop.
srv.run();
return0;
}
When srv.run() is called, rpclib starts the server loop which listens to incoming connections
and tries to dispatch calls to the bound functions. The functions are called from the thread where
run was called from. There is also async_run that spawns worker threads and returns
immediately.
Client
#include<iostream>
#include"rpc/client.h"intmain() {
// Creating a client that connects to the localhost on port 8080
rpc::client client("127.0.0.1", 8080);
// Calling a function with paramters and converting the result to intauto result = client.call("add", 2, 3).as<int>();
std::cout << "The result is: " << result << std::endl;
return0;
}
Status
All planned 1.0.0 features are done and tested; the current state is production-ready.
Who uses rpclib?
This list is updated as I learn about more people using the library; let me
know if you don't want your project listed here.