c++boost中的asio介绍

  • Post author:
  • Post category:其他


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;
}

网络通信:

程序下载链接地址:

。。。。。。。