柳城网站建设搜索关键词的方法
轻量级的tcp/udp/rpc库,简化socket程序编写。
同时,RPC部分也提供了方便易用的功能。
仓库地址
https://github.com/shuai132/asio_net
asio_net
a Tiny Async TCP/UDP/RPC library based on ASIO
and RpcCore
Features
- 简化TCP、UDP相关程序的编写 依赖ASIO
- 提供RPC实现 基于RpcCore
- 局域网内服务发现 基于UDP组播
Options:
- TCP可配置自动处理粘包问题 以支持收发完整的数据包
- 支持设置最大包长度 超出将自动断开连接
Requirements
- C++14
- ASIO
Usage
在自己的项目添加搜索路径
include_directories(asio_net的目录)
以下是各模块的使用示例,完整的单元测试见: test
- TCP
可通过PackOption::ENABLE
开启自动处理粘包模式,后续收发将都是完整的数据包。
默认禁用,用于常规TCP程序。
// echo serverasio::io_context context;tcp_server server(context, PORT/*, PackOption::ENABLE*/);server.on_session = [](const std::weak_ptr<tcp_session>& 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 clientasio::io_context context;tcp_client client(context/*, PackOption::ENABLE*/);client.on_data = [](const std::string& data) {};client.on_close = [] {};client.open("localhost", PORT);context.run();
- UDP
// serverasio::io_context context;udp_server server(context, PORT);server.on_data = [](uint8_t* data, size_t size, const udp::endpoint& from) {};context.run();
// clientasio::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
// serverasio::io_context context;rpc_server server(context, PORT);server.on_session = [](const std::weak_ptr<rpc_session>& rs) {auto session = rs.lock();session->on_close = [rs] {};session->rpc->subscribe("cmd", [](const RpcCore::String& data) -> RpcCore::String {return "world";});};server.start(true);
// clientasio::io_context context;rpc_client client(context);client.on_open = [](const std::shared_ptr<RpcCore::Rpc>& rpc) {rpc->cmd("cmd")->msg(RpcCore::String("hello"))->rsp([](const RpcCore::String& data) {})->call();};client.on_close = [] {};client.open("localhost", PORT);context.run();
- Server Discovery
// receiverasio::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();
// senderasio::io_context context;server_discovery::sender sender_ip(context, "ip", "message");context.run();
Links
-
RPC library for MCU
most MCU not support asio, there is a library can be ported
easily: esp_rpc