Boost.Asio C++ 网络编程:实战精要

本文是《Boost.Asio C++ Network Programming》中文翻译的导览篇,整理了原书的前言与全书目录:读完就能知道这本书讲了什么、阅读前需要准备什么。本站同系列的《Boost.Asio 概览》《Boost.Asio 入门》《Boost.Asio 基本原理》已陆续发布。

实战出精华

在具体的 C++ 网络编程中提升逼格。

《Boost.Asio C++ Network Programming》,John Torjo 著,Copyright © 2013 Packt Publishing。

关于作者

作为一名权威的 C++ 专家,除了偶尔写写 C# 和 Java,John Torjo 把他超过 15 年编程生涯中的大部分时间都贡献给了 C++。他很喜欢在 C++ Users Journal 和其它杂志上写一些编程相关的文章。闲暇的时候,他也喜欢玩扑克、开快车。他有很多自由职业,其中有一个甚至把他玩扑克和编程的爱好结合在一起。如果你想联系他,可以发邮件到 john.code@torjo.com。我要感谢我的朋友 Alexandru Chis、Aurelian Hale、Bela Tibor Bartha、Cristian Fatu、Horia Uifaleanu、Nicolae Ghimbovschi 以及 Ovidiu Deac。感谢他们对本书的反馈和意见。同时我也要感谢 Packt 公司对我频繁错过截稿日期行为的包容。然后最需要感谢的是 Chris Kohlhoff——Boost.Asio 的作者,因为他,才有了 Boost.Asio 如此伟大的库。把这本书送给我最好的朋友 Darius。

关于评审员

Béla Tibor Bartha

一个使用多种技术和语言做开发的专业软件工程师。尽管在过去的 4 年里,他做的是 iOS 和 OSX 应用开发,但是 C++ 陪伴他度过了早期个人游戏项目开发的激情岁月。

我要感谢 John,因为他我才能做这本书的评审。

Nicolae Ghimbovschi

一个参加各类 C++ 项目超过 5 年的天才个人开发者。他主要参与一些企业通信工程的项目。作为一个狂热的 Linux 爱好者,他喜欢利用不同的操作系统、脚本工具和编程语言进行测试和实验。除了编程,他还喜欢骑自行车、瑜伽和冥想。

我要感谢 John 让我来评审这本书。

关于译者

非主流程序猿 mmoaay,技术很烂,喜欢平面设计、鼠绘、交友、运动和翻译,但是却作为一只程序猿混迹在 IT 行业。热爱开源,技术烂就只好做做设计和翻译的工作。

微博:@smmoaay

关于 avplayer

avplayer.org——中国第一技术社区。

全书目录

全书由前言、七章正文和书末的索引组成,前言见下文,各章小节如下:

第一章:Boost.Asio 入门

  • 什么是 Boost.Asio?
  • 历史
  • 依赖
  • 编译 Boost.Asio
  • 重要的宏
  • 同步 VS 异步
  • 异常 VS 错误代码
  • Boost.Asio 中的多线程
  • 不仅仅是网络请求
  • 计时器
  • io_service 类
  • 总结

第二章:Boost.Asio 基本原理

  • 网络 API
  • Boost.Asio 命名空间
  • IP 地址
  • 端点
  • Sockets
  • 同步错误代码
  • Socket 成员函数
  • 其他注意事项
  • read/write/connect 自由函数
  • connect 函数
  • read/write 函数
  • 异步编程
  • 为什么要异步?
  • 异步 run(),run_one(),poll(),poll_one()
  • 持续运行
  • run_one(),poll(),poll_one() 函数
  • 异步工作
  • 异步 post() VS dispatch() VS wrap()
  • 保持运行
  • 总结

第三章:回显服务端/客户端

  • TCP 回显服务端/客户端
  • TCP 同步客户端
  • TCP 同步服务端
  • TCP 异步客户端
  • TCP 异步服务端
  • 代码
  • UDP 回显服务端/客户端
  • UDP 同步回显客户端
  • UDP 同步回显服务端
  • 总结

第四章:客户端和服务端

  • 同步客户端/服务端
  • 同步客户端
  • 同步服务端
  • 异步客户端/服务端
  • 异步客户端
  • 异步服务端
  • 总结

第五章:同步 VS 异步

  • 同步异步混合编程
  • 客户端和服务端之间消息的互相传递
  • 客户端软件中的同步 I/O
  • 服务端软件中的同步 I/O
  • 同步服务端中的线程
  • 客户端软件中的异步 I/O
  • 服务端软件中的异步 I/O
  • 异步服务端中的线程
  • 异步操作
  • 代理实现
  • 总结

第六章:Boost.Asio - 其他特性

  • std streams 和 std buffer I/O
  • Boost.Asio 和 STL 流
  • streambuf 类
  • 处理 streambuf 对象的自由函数
  • 协程
  • 总结

第七章:Boost.Asio - 进阶

  • Asio VS Boost.Asio
  • 调试
  • 处理程序跟踪信息
  • 例子
  • 处理程序跟踪文件
  • SSL
  • Boost.Asio 的 Windows 特性
  • 流处理
  • 随机存储处理
  • 对象处理
  • Boost.Asio 的 POSIX 特性
  • 本地 sockets
  • 连接本地 sockets
  • POSIX 文件描述符
  • Fork
  • 总结

前言

网络编程由来已久,并且极富挑战性。Boost.Asio 对网络编程做了一个极好的抽象,从而保证只需要少量的代码就可以实现一个优雅的客户端/服务端软件。在实现的过程中,它能让你体会到极大的乐趣。而且更为有益的是:Boost.Asio 还包含了一些非网络的特性,用 Boost.Asio 写出来的代码紧凑、易读,而且如果按照我在书中所说的来做,你的代码将无懈可击。

这本书讲了什么?

第一章:Boost.Asio 入门将告诉你什么是 Boost.Asio、怎么编译它,然后还有一些例子。通过本章你会发现 Boost.Asio 不仅仅是一个网络库。另外你还会接触到 Boost.Asio 中最核心的类 io_service。

第二章:Boost.Asio 基本原理包含了你必须了解的内容:什么时候用 Boost.Asio?我们将深入了解异步编程——一种比同步更需要技巧,且更有乐趣的编程方式。这一章也是在开发你自己的网络应用时作为参考的一章。

第三章:回显服务端/客户端将告诉你如何实现一个小的客户端/服务端应用;也许这会是你写过的最简单的客户端/服务端应用。回显应用就是把客户端发过来的消息发送回去然后关闭客户端连接的服务。我们会先实现一个同步的版本,然后再实现一个异步的版本,这样就可以非常容易地看到它们之间的不同。

第四章:客户端和服务端会深入讨论如何用 Boost.Asio 创建一个简单的客户端/服务端应用。我们将讨论如何避免内存泄漏和死锁等问题。为了让你能更方便地对它们进行扩展以满足自己的需求,所有的程序都只实现一个简单的框架。

第五章:同步 VS 异步会带你了解在同步和异步方式之间做选择时需要考虑的事情。首要的事情就是不要混淆它们。在这一章,我们会发现:实现、测试和调试每个类型应用都是非常容易的。

第六章:Boost.Asio 的其他特性将带你了解 Boost.Asio 一些不为人知的特性。你会发现,虽然 std streams 和 streambufs 有一点点难用,但是却表现出了它们得天独厚的优势。最后,是姗姗来迟的 Boost.Asio 协程,它可以让你用一种更容易读懂的方式来写异步代码(就好像写同步代码一样)。

第七章:Boost.Asio 进阶包含了对 Boost.Asio 进阶问题的处理。虽然不需要在日常编程中深入研究它们,但是了解它们对你有益无害(Boost.Asio 高级调试,SSL,Windows 特性,POSIX 特性等)。

读这本书你需要准备什么?

如果需要编译 Boost.Asio 以及运行本书中的例子,你需要一个现代编译器,例如 Visual Studio 2008 及其以上版本或者 g++ 4.4 及其以上版本。

这本书是为谁准备的?

这本书对于那些需要做网络编程却不想深入研究复杂原始网络 API 的开发者来说是一个福音。所有你需要的只是 Boost.Asio 提供的一套 API。作为著名 Boost C++ 库的一部分,你只需要额外添加几个 #include 文件即可转换到 Boost.Asio。

在读这本书之前,你需要熟悉 Boost 核心库的一些知识,例如 Boost 智能指针、boost::noncopyable、Boost Functors、Boost Bind、shared_from_this/enable_shared_from_this 和 Boost 线程(线程和互斥量)。同时还需要了解 Boost 的 Date/Time。另外读者还需要知道阻塞的概念以及”非阻塞”操作。

约定

本书使用不同样式的文字来区分不同种类的信息。这里给出这些样式的例子以及它们的解释。文本中的代码会这样显示:”通常一个 io_service 的例子就足够了”。

一段代码是下面这个样子的:

read(stream, buffer [, extra options])
async_read(stream, buffer [, extra options], handler)
write(stream, buffer [, extra options])
async_write(stream, buffer [, extra options], handler)

专业词汇和重要的单词用黑体显示。

读者反馈

我们欢迎来自读者的反馈。告诉我们你对这本书的看法——你喜欢哪部分,不喜欢哪部分。读者的反馈对我们非常重要,它能让我们写出对读者帮助更大的书。你只需要发送一封邮件到 feedback@packtpub.com 即可进行反馈,注意在邮件的主题中注明书名。如果你有一个擅长的专题,想撰写一本书或者为某本书做贡献,请阅读我们在 www.packtpub.com/authors 上的作者指引。

用户支持

现在你已经是 Packt 书籍的拥有者,我们将告诉你一些注意事项,让你购买本书得到的收益最大化。

下载示例代码

你可以在 www.packtpub.com 登录你的帐号,然后下载你所购买书籍的全部示例代码。同时,你也可以通过访问 www.packtpub.com/support 进行注册,这些示例代码文件将直接发送到你的邮箱。

纠错

尽管我们已经尽最大的努力去保证书中内容的准确性,但是错误还是存在的。如果你在我们的书籍中发现了错误——也许是文字,也许是代码——如果你能将它们报告给我们,我们将不胜感激。这样的话,你不仅能帮助其他读者,同时也能帮助我们改进这本书的下一个版本。如果你发现任何需要纠正的地方,访问 www.packtpub.com/submit-errata,选择你的书籍,点击 errata submission form 链接,然后输入详细的纠错信息并将错误报告给我们。一旦审核通过,这个纠错就会被上传到我们的网站,或者添加到那本书的纠错列表中。所有已发现的纠错都可以访问www.packtpub.com/support,然后通过选择书名的方式来查看。

答疑

如果有任何关于本书的问题,你可以通过 questions@packtpub.com 联系我们。我们将尽我们最大的努力进行解答。到这里,原书的前言与目录就介绍完了。正式上手请从本站的《Boost.Asio 入门》开始。


   转载规则


《Boost.Asio C++ 网络编程:实战精要》 由 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Boost.Asio 入门 Boost.Asio 入门
本章先回答两个问题:什么是 Boost.Asio?怎么编译它?在了解的过程中我们会给出一些例子,你也会在发现 Boost.Asio 不仅仅是一个网络库的同时,接触到它最核心的类——io_service。 什么是Boost.Asio简单来说,
2022-01-18
下一篇 
Boost.Asio 概览:跨平台网络库与 Proactor 模式 Boost.Asio 概览:跨平台网络库与 Proactor 模式
Boost.Asio 是什么Boost.Asio 是一个跨平台的 C++ 网络库,支持 socket、定时器、SSL 等 I/O 对象。理解它之前,需要先弄清两个词:Reactor 和 Proactor——它们是两类 I/O 事件处理模型,
2022-01-04
  目录