简单的聊天室服务器 基于Boost asio(1)--boost库

最近学习了一些boost asio的知识,所以决定解读一下官方文档。继而编写一个简单的聊天服务器。

在开始搞代码之前,得先弄清楚,这个玩意(boost asio)是干什么的。
Boost.Asio是一个跨平台的、主要用于网络和其他一些底层输入/输出编程的C++库。
关于网络处理已经有很多解决方案,但是Boost.Asio是目前为止最优的方案。它在2005年就被包含进Boost,然后被大量Boost的用户测试并使用在许多项目中,比如:Remobo(http://www.remobo.com),可以让你创建你自己的即时私有网络(IPN);libtorrent(http://www.rasterbar.com/products/libtorrent)),一个用于实现比特流客户端的库;PokerTH (http://www.pokerth.net),一个支持LAN和互联网对战的纸牌游戏。
Boost.Asio在网络通信、COM串行端口和文件上成功地抽象了输入输出的概念。你可以基于这些进行同步或者异步的输入输出编程。

依赖
Boost.Asio依赖于如下的库:
Boost.System:这个库为Boost库提供操作系统支持
Boost.Regex:使用这个库(可选的)以便你重载read_until()或者async_read_until()时使用boost::regex参数。
Boost.DateTime:这个库(可选的)为Boost.Asio中的计时器功能提供支持。
OpenSSL:这个库(可选的)为Boost.Asio中的SSL功能提供支持。

重要的宏
如果设置了BOOST_ASIO_DISABLE_THREADS,不管你是否在编译Boost的过程中加入了线程支持,Boost.Asio中的线程支持都会失效。

本章介绍了 Boost C++ 库 Asio,它是异步输入输出的核心。 名字本身就说明了一切:Asio 意即异步输入/输出。 该库可以让 C++ 异步地处理数据,且平台独立。 异步数据处理就是指,任务触发后不需要等待它们完成。 相反,Boost.Asio 会在任务完成时触发一个应用。 异步任务的主要优点在于,在等待任务完成时不需要阻塞应用程序,可以去执行其它任务。

异步任务的典型例子是网络应用。 如果数据被发送出去了,比如发送至 Internet,通常需要知道数据是否发送成功。 如果没有一个象 Boost.Asio 这样的库,就必须对函数的返回值进行求值。 但是,这样就要求待至所有数据发送完毕,并得到一个确认或是错误代码。 而使用 Boost.Asio,这个过程被分为两个单独的步骤:第一步是作为一个异步任务开始数据传输。 一旦传输完成,不论成功或是错误,应用程序都会在第二步中得到关于相应的结果通知。 主要的区别在于,应用程序无需阻塞至传输完成,而可以在这段时间里执行其它操作。

I/O 服务与 I/O 对象

使用 Boost.Asio 进行异步数据处理的应用程序基于两个概念:I/O 服务和 I/O 对象。 I/O 服务抽象了操作系统的接口,允许第一时间进行异步数据处理,而 I/O 对象则用于初始化特定的操作。 鉴于 Boost.Asio 只提供了一个名为 boost::asio::io_service 的类作为 I/O 服务,它针对所支持的每一个操作系统都分别实现了优化的类,另外库中还包含了针对不同 I/O 对象的几个类。 其中,类 boost::asio::ip::tcp::socket 用于通过网络发送和接收数据,而类 boost::asio::deadline_timer 则提供了一个计时器,用于测量某个固定时间点到来或是一段指定的时长过去了。 Asio 所提供的其它 I/O 对象相比较而言,它不需要任何有关于网络编程的知识。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值