Boost.Aiso概述 核心概念和功能0
2017-05-07 16:01
344 查看
Boost.Asio基础解剖
Boost.Asio 基础解剖Boost.Asio 可用于执行如套接字 I/O 对象的同步和异步操作。在使用 Boost.Asio 之前它可能有用概念了解各部分的 Boost.Asio,你的程序,以及它们如何协同工作。
作为一个介绍性的例子,让我们考虑一下当您执行套接字上的连接操作时,会发生什么。我们应通过检查同步操作开始。
您的程序将会有至少一个io_service对象。 Io_service表示程序链接到该操作系统的 I/O 服务。
boost::asio::io_service io_service;
要执行 I/O 操作程序将需要一个I/O 对象如 TCP 套接字︰
boost::asio::ip::tcp::socket socket(io_service);
当同步连接执行操作时,事件按照下列顺序发生︰
1.程序启动连接操作通过调用I/O 对象:
socket.connect(server_endpoint);
2. I/O 对象将请求转给io_service .
3. io_service调用操作系统执行连接操作。
4.操作系统将操作的结果返回给io_service .
5. io_service转换成对象类型boost::system::error_code运算产生的任何错误。error_code可能与特定值进行比较,或作为布尔值 (在那里false的结果意味着没有出错) 进行了测试。结果然后转发回I/O 对象.
6. I/O 对象将引发异常的类型boost::system::system_error ,如果操作失败。如果要启动操作的代码而编写为︰
boost::system::error_code ec;
socket.connect(server_endpoint, ec);
然后error_code变量ec将设置为操作的结果,并会引发任何异常。
当使用异步操作时,不同的事件顺序发生。
1.程序启动连接操作通过调用I/O 对象:
socket.async_connect(server_endpoint, your_completion_handler);
其中your_completion_handler是函数或函数对象具有签名︰
void your_completion_handler(const boost::system::error_code& ec);
所需的确切签名取决于正在执行的异步操作。参考文档指示每个操作的适当方式。
2. I/O 对象将请求转给io_service .
3. io_service向操作系统发出信号,它应开始异步连接。
时间的流逝。(在同步情况下这种等待会有被载完全在连接操作的持续时间内)。
4.操作系统指示连接操作已完成通过将结果放在一个队列,准备由io_service获取.
5.您的程序必须调用io_service::run() (或类似的io_service成员函数之一)。对在那里io_service::run()块的调用是未完成的异步操作,所以你通常会叫它,只要你有开始你第一次的异步操作。
6.虽然对io_service::run()的调用, io_service当中操作的结果,把它转换为error_code,内外然后将它传递给你完成处理程序.
这是简化的图片 Boost.Asio 是如何运作。你会想要深入进一步纳入文件如果您需要更高级,如延长 Boost.Asio 来执行其他类型的异步操作。
相关文章推荐
- Boost.Aiso概述 核心概念和功能1
- Elasticsearch概述、ES概念、什么是搜索、全文检索、Elasticsearch功能(来自网络+学习资料)
- 3.1、Spark核心概念——RDD概述
- spring框架概述及六大核心功能介绍
- Asio 核心概念和功能文档学习(一)
- Unity多人游戏和网络功能(一) 概述和基本概念
- 003-spring-data-elasticsearch 3.0.0.0使用【一】-spring-data之概述、核心概念、查询方法、定义Repository接口
- Boost.Aiso概述 基本原理
- Unity多人游戏和网络功能(一) 概述和基本概念
- Asio 核心概念和功能文档学习(二)
- Asio 核心概念和功能文档学习(三)
- Asio 核心概念和功能文档学习(三)
- Unity多人游戏和网络功能(一) 概述和基本概念
- Asio 核心概念和功能文档学习(一)
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(69)-微信公众平台开发-功能概述
- Android核心分析 之二 -------方法论探讨之概念空间篇
- Exchange 2007统一消息服务器功能概述
- 模仿微信语音聊天功能(3) 核心部分,录音功能的实现
- Linux 网络协议栈开发代码分析篇之VLAN(二)—— Linux下VLAN功能的实现概述
- spark概念、编程模型和模块概述