《http篇》boost.asio实现http服务

发布时间 2023-07-28 14:14:21作者: Fusio

boost简介

参考链接:https://blog.csdn.net/qq_45491628/article/details/131367797

1998 年,Beman G.Dawes(C++标准委员会成员之一)发起倡议并建立了Boost 社区,其目的是向C++程序员提供免费的、经同行审查的、可移植的、高质量的C++源程序库。

Boost库是一款高效的C++跨平台开发库。Boost库官方版提供了丰富的模板类和函数接口,并实现了诸如智能指针、容器、算法等常用功能。Boost库还支持多种操作系统和编译器环境,并提供了详细文档和示例代码以便用户进行快速学习和上手使用

它使得C++编程更优雅、更有活力、更高产,C++11的标准有三分之二来自boost库。Boost 程序库可以与C++标准库很好地共同工作,因此Boost库可以适合最后的标准化。

boost编译和配置

参考链接:https://www.jb51.net/article/191861.htm
参考链接:https://blog.csdn.net/qq_45491628/article/details/131367797

下载

下载链接:https://www.boost.org/
image

image

image

解压

我这里直接解压到D盘,解压后目录【D:\boost_1_73_0】

最上层结构:

#存放配置脚本和说明文件
├── boost                 # 最重要的目录,90%以上的Boost程序库源码都在这里
├── doc                   # HTML 格式的文档,也可以生成PDF格式文档
├── libs                  # 所有组件的示例、测试、编译代码和说明文档
├── more                  # 库作者相关的文档
├── status                # 用于测试Boost库的各个组件
└── tools                 # b2、quickbook等自带工具

Boost目录结构:(在大多数情况下,我们只需要关心boost子目录,这里面以头文件的形式分门别类地存放了我们要使用的库代码)

├── accumulators          # 累加器库
├── algorithm             # 算法库
├── align                 # 内存对齐库
├── archive               # 序列化库
├── asio                  # 异步并发库
├── assert                # 断言库
├── assign                # 赋值初始化库
├── atomic                # 原子操作库
├── beast				  # 高级网络通信库
├── bimap                 # 双向关联数组
├── bind                  # bind表达式
├── chrono                # 时间处理库
...						  # 其他库
├── python                # python库   (把C++类和函数映射到Python之中)
├── yap                   # 表达式模板库
...

编译

注意:

1、Boost库的头文件与我们平常所用的头文件*.h或C++标准库的头文件(没有后缀名)不同,这正是Boost的独特之处。它把C++类的声明和实现放在了一个文件中,而不是分成两个文件,即.h+.cpp,故文件的后缀是.hpp。

2.这里需要说明一下,刚开始拿到压缩包解压后,想着能够像GDAL库一样,直接拷贝到工程目录下进行包含引用。然而发现引用进去文件报错不能打开。 所以boost库不能直接拷贝进去使用,对于有些文件还是需要编译一下静态库进而引用的。这里的编译与GDAL和OpenCV的安装有一定的区别,这里的编译安装,只是在对应的文件下生成静态库。

执行bat

以管理员身份运行“VS 2015 的 x64 本机工具命令提示”

image

执行命令

cd D:\
bootstrap.bat // 执行失败需要查看bootstrap.log,成功后会得到b2.exe,

如果没有生成b2.exe,说明生成失败,看bootstrap.log报错。这里是因为vs工具集版本原因。
参考链接:https://stackoverflow.com/questions/74348431/unknown-toolset-vcunk-executing-bootstrap-bat-of-boost-library

根据自己的vs版本改成对应命令就可以,例如我的是vs2015,改为使用命令【bootstrap.bat vc14】,下面是对应信息。

vs2008 : msvc-9.0,
vs2010 : msvc-10.0,
VS2012、VS2013:msvc-12.0
vs2017 : msvc-14.1,
vs2015 : msvc-14.0,
linux :gcc

执行b2.exe

bat执行完后会生成exe文件
image

在命令行中输入:

b2.exe

等待程序编译完成,会在目录下生成bin.v2和stage两个文件夹,其中bin.v2下是生成的中间文件,大小在2.4G左右,可以直接删除。stage下才是生成的lib文件。文件如下:

image

说明:

这里通过双击b2.exe进行编译的,默认在stage下生成lib文件夹,里面只包含着静态库。如果想要生成dll动态库,可./b2 --help查看参数说明,然后需要输入相应的编译命令如

配置

(图片目录与实际不一样,只是作位置参考)
1、项目(右键)->属性
image

2、点击vc++目录:包含目录添加【D:\boost_1_73_0】,库目录添加【D:\boost_1_73_0\stage\lib】
image
image
image

3、点击链接器->常规->附加库目录:添加【D:\boost_1_73_0\stage\lib】

image

测试使用

代码如下:

// 工程:属性 =》配置属性 =》C/C++ =》常规 =》附加包含目录 填上:D:\boost_1_73_0
// 工程:属性 =》配置属性 =》链接器 =》常规 =》附加库目录 填上:D:\boost_1_73_0\stage\lib

#include <iostream>
#include <string>
#include <boost/filesystem.hpp>

using namespace boost::filesystem;

int main(int argc, char* argv[])
{
 std::string file;
 std::cin >> file;
 std::cout << file << " : " << file_size(file) << std::endl;

 return 0;
}