00 基本概念

基本概念

asio基于两个概念:

  • I/O服务,抽象了操作系统的异步接口 boost::asio::io_service::service

    • boost::asio::io_service
  • I/O对象,有多种对象 boost::asio::basic_io_object

    • boost::asio::ip::tcp::socket
    • boost::asio::ip::tcp::resolver
    • boost::asio::ip::tcp::acceptor
    • boost::asio::local::stream_protocol::socket 本地连接
    • boost::asio::posix::stream_descriptor 面向流的文件描述符,比如stdout, stdin
    • boost::asio::deadline_timer 定时器
    • boost::asio::signal_set 信号处理

​ 所有 I/O 对象通常都需要一个 I/O 服务作为它们的构造函数的第一个参数,比如:

boost::asio::io_service io_service;
boost::asio::deadline_timer timer(io_service, boost::posix_time::seconds(5));

层次关系

1. boost::asio

io_context

​ 而asio空间中,我们首先不可避免的就是类io_serviceio_context。(io_context这个类是用来替代io_service的,建议以后直接使用io_context即可)

​ 这个类非常重要,它相当于我们程序与系统之间I/O操作的中介,我们所有的接受或发送数据操作,都是通过将需求提交给这个类,然后这个类再交给计算机来执行的。

buffer

​ 除了io_context外,asio里面还有一个函数非常重要,那就是buffer函数,它的作用其实就是构造一个结构体,大致如下:

struct{
void* buf;
s_size len;
}

​ 该网络模块中所有的收发数据操作,都不接受单独的字符串,而是这样一个结构体,分别为缓存区的首地址以及缓存区的大小。

2. boost::asio::ip

​ asio里面进一步的命名空间ip,我们的TCP和UDP相关类,就在这个ip里面。

namespace class/function
boost::asio::ip address
boost::asio::ip::tcp socket,acceptor,endpoint
boost::asio::ip::udp socket,endpoint
  • address:网络中的ip地址,最常用的就是它的静态函数from_string,将十进制的ip地址转化为网络字节序。

  • socket:网络通信中的socket,用于read/write。

  • acceptor:服务器使用的监听器对象,内部封装了一个socket,用于接受客户端的socket连接

  • endpoint:存储了IP和端口的对象。