轻量级的tcp、udp、rpc库,为了简化socket程序编写,基于asio。
提供了轻量级的、方便易用的rpc功能,基于rpc_core。
https://github.com/shuai132/asio_net
a tiny Async TCP/UDP/RPC library based on asio
and rpc_core
Options:
TCP can be configured to automatically handle the problem of packet fragmentation to support the transmission of
complete data packets.
Supports setting the maximum packet length, and will automatically disconnect if exceeded.
The following are examples of using each module. For complete unit tests,
please refer to the source code: test
TCP
You can enable automatic handling of packet fragmentation using tcp_config
.
Subsequent send and receive will be complete data packets.
By default, this feature is disabled.
// echo server
asio::io_context context;
tcp_server server(context, PORT/*, tcp_config*/);
server.on_session = [](const std::weak_ptr& ws) {
auto session = ws.lock();
session->on_close = [] {
};
session->on_data = [ws](std::string data) {
ws.lock()->send(std::move(data));
};
};
server.start(true);
// echo client
asio::io_context context;
tcp_client client(context/*, tcp_config*/);
client.on_data = [](const std::string& data) {
};
client.on_close = [] {
};
client.open("localhost", PORT);
client.run();
// server
asio::io_context context;
udp_server server(context, PORT);
server.on_data = [](uint8_t* data, size_t size, const udp::endpoint& from) {
};
server.start();
// client
asio::io_context context;
udp_client client(context);
auto endpoint = udp::endpoint(asio::ip::address_v4::from_string("127.0.0.1"), PORT);
client.send_to("hello", endpoint);
context.run();
RPC
rpc based on tcp and rpc_core, and also support ipv6 and ssl.
more usages, see rpc.cpp and rpc_2.cpp
// server
asio::io_context context;
rpc_server server(context, PORT/*, rpc_config*/);
server.on_session = [](const std::weak_ptr& rs) {
auto session = rs.lock();
session->on_close = [] {
};
session->rpc->subscribe("cmd", [](const std::string& data) -> std::string {
return "world";
});
};
server.start(true);
// client
asio::io_context context;
rpc_client client(context/*, rpc_config*/);
client.on_open = [](const std::shared_ptr& rpc) {
rpc->cmd("cmd")
->msg(std::string("hello"))
->rsp([](const std::string& data) {
})
->call();
};
client.on_close = [] {
};
client.open("localhost", PORT);
client.run();
// receiver
asio::io_context context;
server_discovery::receiver receiver(context, [](const std::string& name, const std::string& message) {
printf("receive: name: %s, message: %s\n", name.c_str(), message.c_str());
});
context.run();
// sender
asio::io_context context;
server_discovery::sender sender_ip(context, "ip", "message");
context.run();
RPC library for MCU
most MCU not support asio, there is a library can be ported easily: esp_rpc