ASIO 之 剖 析--(2) 剖析 ASIO

l  下面我们就详细的分析一下BOOST::ASIO。首先我们从宏观使用的角度来考察ASIO。作为开始首先从同步IO方式开始我们的剖析之旅。

1: BOOST ASIO 下的同步IO操作。

由于asio库具有在不同平台,不同编译器下工作的特性。其对不同平台和编译器的适应是其一大特色且其具有类似于ACE跨平台的特性,相比起ACE的复杂庞大,ASIO则相对较为简单。

1.1:基本概念:

同步方式下的事件发生顺序以如下的方式进行。[以socket方式为例]。

1) 首先,为了能够使用操作系统所提供的服务,程序中至少存在着一个io_service对象,其主要的目的是为将OS所提供的IO服务能够提供给其上层用户IO对象,比如:网络套接字,串口等。我们可以使用 boost::asio::io_service io_service; 声明和定义一个io_service对象。

 2) 将要使用的IO对象与一个io_service对象进行绑定,以便该IO对象能够通过io_service与操作系统底层进行通信。 我们以SOCKET通信为例,通过下面的代码将IO对象与IO_SERVICE对象进行绑定:

tcp::socket socket(io_service);

 

3) io_service调用操作系统的服务进行连接。

 4) 操作系统将其执行的结果返回给io_service对象。

 5) io_service将操作系统返回的错误信息进行相应的转换,将操作系统级的错误代码转换成boost::system::error_code形式。然后,将该错误信息发送至io对象,此处为socket对象。

 6) IO对象将该错误信息向上传递至应用程序。

2:BOOST ASIO 下的异步IO操作。

2.1:而对于异步方式则与同步方式有所不同,其主要区别如下,其相应执行的流程也有所不同。:

1)  首先由一个IO对象,例如:socket,发起一个联接操作。例如:

              socket.async_connect(server_endpoint,your_completion_handler);

其中your_completion_handler为函数指针,其执行联接事件完成后所要执行的服务。

2) IO 对象将其请求信息转发至io_service。

3)  io_service将通知操作系统,开始一个异步联接请求。

4)  操作系统将联接完成的消息进入完成消息队列,io_service读取完成的消息由消息队列中的事件消息。

5)  上层应用必须通过调用io_service.run()函数或其类似的成员函数来获取操作结果。在异步操作未完成时,io_service.run()函数将一直处于阻塞状态。因此,通常是在开始执行异步操作的时候就调用run函数。

6)  在io_service.run ()函数内部,io_service取出操作结果并将错误代码发送转换成可识别的类型,而后将错误代码转发至your_completion_handler函数中,供用户进行相关的错误处理。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值