Standalone Asio是轻量跨平台C++网络库,支持同步/异步I/O;需配置-std=c++17和-DASIO_STANDALONE;核心为io_context事件循环、shared_from_this生命周期管理及error_code错误处理。
Asio 是一个跨平台的 C++ 网络编程库,其非 Boost 版本(即 standalone Asio)以头文件为主、无依赖、轻量易集成,非常适合学习和中小型项目。它支持同步与异步 I/O,而异步模型正是高性能网络服务的核心。下面以最简实践路径带你入门。
官网地址:https://www./link/83b7b19e6be902a7bab8244f0d83481f。下载最新 release(如 asio-X.Y.Z.tar.gz),解压后只需将 include/asio 和 include/boost(仅含 asio 所需的少量 boost 头文件,实际可忽略)加入编译器 include 路径即可。C++17 或更高版本推荐启用:
-std=c++17(支持 std::optional、std::variant 等现代特性)-DASIO_STANDALONE(显式启用 standalone 模式,禁用 Boost 依赖)WIN32_LEAN_AND_MEAN 避免 Windows 头冲突核心思想是“发起操作 → 注册回调 → 继续运行”,不阻塞线程。以下是一个监听端口、接受连接并读取一行数据的最小异步服务器示例:
#include #include#include #include using asio::ip::tcp; struct session : std::enable_shared_from_this { tcp::socket socket_; std::array buffer_; explicit session(tcp::socket socket) : socket_(std::move(socket)) {} void start() { do_read(); } private: void do_read() { auto self = shared_from_thi s(); socket_.async_read_some( asio::buffer(buffer_), [self](const std::error_code& ec, std::size_t length) { if (!ec) { std::cout << "Received: " << std::string(self->buffer_.data(), length); self->do_read(); // 继续读 } }); } }; struct server { asio::io_context& ioc_; tcp::acceptor acceptor_; server(asio::io_context& ioc, short port) : ioc_(ioc), acceptor_(ioc, tcp::endpoint(tcp::v4(), port)) { do_accept(); } private: void do_accept() { acceptor_.async_accept([this](const std::error_code& ec, tcp::socket socket) { if (!ec) { std::make_shared
(std::move(socket))->start(); } do_accept(); // 接受下一个连接 }); } }; int main() { asio::io_context ioc; server s(ioc, 8080); ioc.run(); // 启动事件循环 }
注意点:
shared_from_this() 保证 session 对象在回调执行期间不被销毁async_accept、async_read_some)立即返回,不等待完成io_context::run() 是单线程事件循环入口;多线程可用 run_work_guard + 多个线程调用 run()
客户端常需解析域名再连接。Asio 提供 ip::tcp::resolver 异步解析:
void connect_to_host(asio::io_context& ioc, const std::string& host, const std::string& port) {
tcp::resolver resolver(ioc);
resolver.async_resolve(
host, port,
[&ioc](const std::error_code& ec, tcp::resolver::results_type results) {
if (!ec) {
tcp::socket socket(ioc);
asio::async_connect(socket, results,
[&socket](const std::error_code& ec, const tcp::endpoint&) {
if (!ec) {
std::cout << "Connected!\n";
// 后续 send / async_read...
}
});
}
});
}
关键细节:
async_connect 会自动尝试直到成功或全部失败socket 值语义对象——应使用智能指针或确保生命周期,否则可能析构后访问异步操作的错误统一通过 std::error_code 回调参数传递,常见错误码如:
asio::error::operation_aborted:对象销毁时未完成的操作被取消(正常,无需报错)asio::error::eof:对端关闭连接(read 返回 0 字节)asio::error::connection_reset:连接被重置(如对端崩溃)资源安全建议:
std::shared_ptr 管理会跨回调生命周期的对象(如 session、socket)socket.close(ec),避免残留 pending 操作socket.cancel() 或 io_context.stop()(后者会终止 run)不复杂但容易忽略:异步不是“多线程”,而是“非阻塞+回调驱动”。理解 io_context 的角色、对象生命周期和错误传播机制,比写更多 handler 更重要。写几个 echo server/client 跑通,再逐步加超时、SSL、协程(Asio 支持 C++20 coroutine)就顺了。
# windows
# ipv6
# 字节
# 端口
# ssl
# session
# 栈
# ai
# c++
# ios
# 解压
# win
# dns
# echo
# EOF
# include
相关文章:
如何通过二级域名建站提升品牌影响力?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何在Windows服务器上快速搭建网站?
如何解决ASP生成WAP建站中文乱码问题?
官网建站费用明细查询_企业建站套餐价格及收费标准指南
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
如何彻底删除建站之星生成的Banner?
如何在万网ECS上快速搭建专属网站?
c++怎么用jemalloc c++替换默认内存分配器【性能】
如何在云主机上快速搭建多站点网站?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
开心动漫网站制作软件下载,十分开心动画为何停播?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
Swift中swift中的switch 语句
活动邀请函制作网站有哪些,活动邀请函文案?
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
如何选择建站程序?包含哪些必备功能与类型?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
大同网页,大同瑞慈医院官网?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
独立制作一个网站多少钱,建立网站需要花多少钱?
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何快速完成中国万网建站详细流程?
广州美橙建站如何快速搭建多端合一网站?
文字头像制作网站推荐软件,醒图能自动配文字吗?
制作营销网站公司,淘特是干什么用的?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
如何在云主机快速搭建网站站点?
网站专业制作公司有哪些,做一个公司网站要多少钱?
学校建站服务器如何选型才能满足性能需求?
视频网站制作教程,怎么样制作优酷网的小视频?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
建站之星伪静态规则如何正确配置?
教程网站设计制作软件,怎么创建自己的一个网站?
建站之星如何通过成品分离优化网站效率?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
山东网站制作公司有哪些,山东大源集团官网?
html制作网站的步骤有哪些,iapp如何添加网页?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
c# 在ASP.NET Core中管理和取消后台任务
如何做网站制作流程,*游戏网站怎么搭建?
建站之星安装步骤有哪些常见问题?
如何在阿里云部署织梦网站?
,网站推广常用方法?
如何在腾讯云免费申请建站?
网站制作说明怎么写,简述网页设计的流程并说明原因?
建站OpenVZ教程与优化策略:配置指南与性能提升
*请认真填写需求信息,我们会在24小时内与您取得联系。