boost_asio
asio前摄器模式(Proactor)
1.封装select,poll/epoll,kqueue,overlapped i/o机制
2.实现异步io模型
3.异步模式下,程序发起io请求,同时定义一个用于回调的完成处理函数,像io_service提交请求
4.io_service同样把io操作转交给操作系统执行,但它不同步等待,而是立即返回
5.程序调用io_service的run成员函数等待异步操作完成
6.异步操作完成时io_service从操作系统获取执行结果,调用完成处理函数
7.asio使用自己定义的线程概念strand
8.asio使用的缓冲区由mutable_buffer和const_buffer封装
9.asio使用system库的error_code和system_error表示程序运行的错误
deadline_timer定时器
1.有两种形式的构造函数,第一个参数为io_service对象,第二个参数是定时器终止时间
2.定时器一旦创建,它立即开始计时,可以使用成员函数wait()来同步等待定时终止,或使用async_wait异步等待,定时器终止会调用handler函数wait
3.创建定时器时不指定终止时间,那定时器不会工作,可以用expires_at()和expires_from_now()分别设置定时器终止的绝对时间和相对时间,然后再调用wait()和async_wait()等待异
4.wait()和async_wiat()使用它们无参重载形式,可以获得定时器终止时间
5.cancel()函数,功能是通知所有异步操作取消,转而等待定时器终止
asio库类
1.ip::tcp类定义数个用于tcp通信的typedef类型,包括endpoint,socket,iostream,acceptor,resolver等
2.ip::address来表示ip地址,address::from_string()从字符串产生ip地址,address::to_string()把ip地址转换为字符串
3.socket处理
a) 成员函数connect()可以连接到指定的通信端点
b) 连接成功后loacl_endpoint()和romote_endpoint()获得连接两端的端点信息
c)用read_some()和write_some()阻塞读写数据
d) 操作完成后用close()函数关闭socket
e) acceptor类用户服务端,在指定端口接受连接
f) resolver类用户客户端解析网址获得可用的ip地址
g) 异步socket处理流程与同步程序基本相同,将原有的同步调用函数换成前缀是async_的异步调用函数,并增加回调函数,在回调函数中再启动一个异步调用
4.udp协议
a) 不需建立连接,使用receive_from和send_to就可以直接通过端点发送数据
5.asio提供ip::tcp::iostream类可以像标准流一样操作,内部集成resolver的域名解析功能和acceptor接受连接功能