asio库基于操作系统提供的异步机制。主要关注于网络通信方面。封装了socket API,支持TCP,UDP,ICMP等网络通信协议。
asio的异步操作并不局限于网络编程,还支持串口读写,定时器,SSL等功能,使用asio不需要编译,但需要依赖其他boost库组件,最基本的是boost.system
和boost.datetime库,用来提供系统错误和时间支持。其他可选的库还有regex,thread,serialization。
核心类是io_service
同步模式下:程序发起一个IO操作,向io_service提交请求,io_service把操作转交给操作系统,同步等待当IO操作完成,
系统通知io_service,然后io_service再把结果发送给程序,完成整个同步流程。与多线程的join()等待方式很相似。
异步模式下:程序除了要发起IO操作,还要定义一个用于回调的完成处理函数,io_service同样把IO操作转交给操作系统,但他不同步等待,而是
立即返回。
代码举例:
同步操作:
#include<boost/asio.hpp>
#include<boost/date_time/posix_time/posix_time.hpp>
using namespace boost::asio;
using namespace std;
int main()
{
io_service ios;
deadline_timer t(ios,boost::posix_time::seconds(2));
cout<<t.expires_at()<<endl;
t.wait();
cout<<"hello asio"<<endl;
deadline_timer t2(ios,boost::posix_time::seconds(2));
cout<<t2.expires_at()<<endl;
t2.wait();
cout<<"hello asio2"<<endl;
return 0;
}
异步操作:
#include<boost/asio.hpp>
#include<boost/date_time/posix_time/posix_time.hpp>
using namespace boost;
using namespace boost::asio;
using namespace std;
void print(const system::error_code&)
{
cout<<"I think I will change the world,but\n\
finally the world changes me"<<endl;
}
int main()
{
io_service ios;
deadline_timer t(ios,boost::posix_time::seconds(2));
t.async_wait(print);
cout<<"it show before t expired."<<endl;
ios.run();
return 0;
}
网络通信:
程序下载链接地址:
。。。。。。。