a tiny c++11 rpc library, supports all platforms (macOS, Linux, Windows, iOS, Android, etc.) and most microchips ( Arduino, STM32, ESP32/ESP8266, etc.)
Full-feature rpc frameworks (e.g. gRPC
and bRPC
) very complex and not suitable for embedded systems.
This project offers a lightweight and user-friend rpc library that is better suited for one-to-one rpc calls. It supports all platforms and a wide range of microchips, including Arduino, STM32, ESP32/ESP8266, and more.
Note: This project only offers the protocol layer and API, it does not include the implementation of the transport layer. For TCP-based implementations: asio_net
tcp socket
, serial port
, etc.)flatbuffers
and nlohmann::json
dispose
for automatic cancel requeststd::future
interfaceC++
Rust
websocket
.tcp socket
, serial port
, etc., message pack and unpack need to be implemented.
Or you can use stream_connection.// The Receiver
rpc->subscribe("cmd", [](const std::string& msg) -> std::string {
assert(msg == "hello");
return "world";
});
// The Sender
rpc->cmd("cmd")
->msg(std::string("hello"))
->rsp([](const std::string& rsp) {
assert(rsp == "world");
})
->call();
msg
and rsp
support any serializable type, see Serialization.
Detailed usages and unittests can be found here: rpc_test.cpp
High-performance and memory-saving binary serialization.
For example, user data:
struct Type {
uint8_t id = 1;
uint8_t age = 18;
std::string name = "test";
};
json: {"id":1,"age":18,"name":"test"}
library | bytes |
---|---|
json | 31 |
flatbuffers | 44 |
protobuf | 10 |
msgpack | 8 |
rpc_core | 8 |
#include "rpc_core/serialize.hpp"
struct TestStruct {
uint8_t a;
std::string b;
OtherType c
// RPC_CORE_DEFINE_TYPE_INNER(a, b, c);
};
RPC_CORE_DEFINE_TYPE(TestStruct, a, b, c);
choose RPC_CORE_DEFINE_TYPE
or RPC_CORE_DEFINE_TYPE_INNER
for private member variable.
flatbuffers.hpp
Supports using types generated by flatbuffers
directly as message
(add the option --gen-object-api
when using flatc
)
json_msg.hpp
Supports using types supported by nlohmann/json directly as message
(the to_json/from_json
rules in nlohmann/json
need to be satisfied, and use DEFINE_JSON_CLASS
).
json.hpp
A flexible way to use nlohmann/json
This project is licensed under the MIT license.