Boost.asio概叙
1.asio依赖一些Boost库组件
boost.system:提供系统错误支持;
标准库<chrono>:提供时间功能;也可以使用boost.chrono,但此时必须定义宏BOOST_ASIO_DISABLE_STD_CHRONO
coroutine:
regex:
thread:
serialization:
2.asio涉及到的设计模式
前摄器模式
3.asio核心类
io_service
4.同步模式
5.异步模式
6.handler
回调函数
6.1handler类型
- 最基本handler,只有一个error_code参数,标志某个异步事件完成;
- error_code 和 signal_number两个参数,标志发生了一个UNIX信号事件;
- error_code 和 bytes_transferred两个参数,标志某个读写操作完成,可读写的数据字节数是bytes_transferred, 通常用于socket回调
6.2bind
把任意函数适配为asio要求的handler形式。
6.3io_service.run()
启动事件循环,阻塞等待所有注册到io_service的事件完成
6.4strand类
序列化异步操作,保证异步代码在多线程的环境中可以正确执行,无需使用互斥量。
6..4.1strand.wrap()
包装一个函数,返回一个相同签名的函数对象,保证线程安全的在strand中执行。
6.5work
work生命周期中,io_service永远不会因其它异步事件完成而结束事件循环。
6.6数据缓冲区
mutable_buffer 和 const_buffer
6.7错误处理
error_code 和 system_error
6.8跟踪日志
宏:BOOST_ASIO_ENABLE_HANDLER
位置:<boost/asio.hpp> 前
格式:tag | timestamp | action | description
tag:标记字符串(目前总是“@asio”)
timestamp:时间戳,精确到毫秒
action,description:记录异步代码的具体动作,具体查资料
日志可视化(png或pdf文件):脚本handlerviz.pl(./libs/asio/tools/),需要图形工具GraphViz支持。