当前位置: 首页 > news >正文

asio网络编程 tcp、udp、rpc

轻量级的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

http://www.lryc.cn/news/4146.html

相关文章:

  • 双目测距------双目相机V1.0,将双目相机采集到任意一点的深度数据进行串口传输(带源码)
  • jetson nano(ubuntu)安装Cmake
  • 图的基本介绍和表示方式
  • 本周大新闻|传微软解散工业元宇宙团队,MIT研发垂直堆叠全彩Micro LED
  • SpringMVC:拦截器(12)
  • 计算机网络3:HTTP1.0和HTTP1.1的区别
  • Urho3D 编辑器说明
  • C++类基础(十一)
  • Windows安装系列:SVN Server服务
  • 快速傅里叶算法(FFT)快在哪里?
  • 利用Markdown写学术论文资料汇总贴
  • MySQL 高级查询
  • JavaSE学习day4_01 循环for,while,do...while
  • C/C++中的static关键字
  • 67 自注意力【动手学深度学习v2】
  • 电子学会2022年12月青少年软件编程(图形化)等级考试试卷(二级)答案解析
  • 关于链表中插入结点的操作……
  • 【项目精选】百货中心供应链管理系统
  • Qt优秀开源项目之十六:SQLite数据库管理系统—SQLiteStudio
  • Python __doc__属性:查看文档
  • 电子科技大学操作系统期末复习笔记(一):操作系统概述
  • [实践篇]13.20 Qnx进程管理slm学习笔记(三)
  • 冰冰学习笔记:多线程
  • 补充一些前端面试题
  • 七大设计原则之单一职责原则应用
  • [USACO23JAN] Leaders B
  • C++模板初阶
  • 文献阅读:Scaling Instruction-Finetuned Language Models
  • gpt草稿
  • mysal第三次作业