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类型

  1.   最基本handler,只有一个error_code参数,标志某个异步事件完成;
  2.   error_code 和 signal_number两个参数,标志发生了一个UNIX信号事件;
  3.   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支持。

posted @ 2019-05-13 10:30  N_zero  阅读(231)  评论(0)    收藏  举报