【20】Asio官方文档 PDF 电子书

[复制链接]

该用户从未签到

759

主题

763

帖子

4660

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4660
跳转到指定楼层
楼主
发表于 2017-12-28 14:53:41 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式

想要查看内容赶紧注册登陆吧!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

基本Asio解剖Asio在I/O对象例如sockets上完成操作,即可是同步操作也可是异步操作。在开始使用Asio以前,了解Asio多个部分,你的程序,以及他们怎么一起工作的的概念图非常有用的。
我们考虑当你在一个socket上执行一个连接操作时都发生了些什么作为一个引导的例子。我们可以通过考察同步操作开始。

Your program(你的程序)会至少有一个io_service对象。io_service表示your program(你的程序)到operating system(操作系统)的I/O服务的纽带。
asio::io_service io_service;
要执行一个I/O操作,your program(你的程序)需要一个I/O对象如一个TCP socket:
asio::ip::tcp::socket socket(io_service);
当一个同步连接操作执行时,下面是事件序列发生:
1.Your program(你的程序)通过调用I/O对象初始化连接操作:
socket.connect(server_endpoint);
2.I/O对象转发请求给io_service
3.io_service调用operating system(操作系统)执行连接操作。
4.operating system(操作系统)返回操作的结果给io_service
5.io_service会将操作的任何错误解释成为一个asio::error_code对象。error_code(错误码)可能被与特定值比较,也可能作为一个布尔值被测试(false意味着没有错误发生)。然后结果返回给I/O对象
6.如果失败I/O对象抛出asio::system_error类型的异常。如果初始化代码像下面这样写:
asio::error_code ec;
socket.connect(server_endpoint, ec);
那么操作的结果会被设置到error_code变量ec,没有异常会被抛出。
当使用异步操作时,不同的事件序列发生。

1.Your program(你的程序)通过调用I/O对象初始化连接:
socket.async_connect(server_endpoint, your_completion_handler);
这里your_completion_handler是一个函数或函数对象有如下的签名:
void your_completion_handler(const asio::error_code& ec);
需要的准确的签名根据执行的异步操作不同而不同。参考手册表明了每种操作相应的格式。
2.I/O对象转发请求给io_service
3.io_serviceoperating system(操作系统)发信号,告诉它应该开始一个异步连接。
时间流逝。(在同步的情形中这里会等待整个连接操作的时间。)

4.operating system(操作系统)把结果放置在准备被io_service对象拾取的队列中表明连接操作已经完成。
5.Your program(你的程序)必须调用io_service::run()(或者一个类似的io_service成员方法)来获取结果。当有未完成的异步操作时,调用io_service::run()会阻塞,所以你通常尽快调用它一旦开始了第一个异步操作。
6.在io_service::run()内部,io_service将运行结果出列,把它翻译为一个error_code,然后把它传给your completion handler。这只是Asio怎样运行的简化图。如果你的需求更高级,你可能想要深入文档,例如扩展Asio来执行其他异步操作。



下载地址(回复可见):
游客,如果您要查看本帖隐藏内容请回复




分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

快速回复高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表