文章目录
- 1.beast网落库介绍
- 2.相关类及api
- 3.异步读写的处理
- 3.1异步写案例
- 3.2异步读案例
1.beast网落库介绍
Beast网络库是一个基于Boost库的C++网络库,特别用于开发高性能的网络应用程序。它提供了一组易于使用的API,主要用于处理HTTP和WebSocket协议,并支持异步操作和多线程处理。
2.相关类及api
Tcp连接的建立
一个事件循环
boost::asio::io_context
socket
boost::asio::ip::tcp::socket
接收连接器
boost::asio::ip::tcp::accpetor
http的相关类及api
表示HTTP请求,包含请求方法、URL、HTTP头部和可选的请求体:
boost::beast::http::request< boost::beast::http::dynamic_body >
表示HTTP响应,包含状态码、响应头部和可选的响应体:
boost::beast::http::response< boost::beast::http::dyanmic_body >
异步读写
boost::beast::async_read
boost::beast::async_write
3.异步读写的处理
async_read(AsyncReadStream& stream, //可异步读的流,比如socketDynamicBuffer& buffer, //动态缓冲区basic_parser<isRequest>& parser,//解析器,可以理解为读取完消息的格式,一般用请求报格式和响应报文格式就够了ReadHandler&& handle //回调函数,支持可调用对象,lambda函数,一般函数参数是//beast::error_code 和std::size_t)
async_write(AsyncReadStream& stream, //可异步读的流,比如socketDynamicBuffer& buffer, //动态缓冲区,直接用http的响应报文ReadHandler&& handle //回调函数
)
3.1异步写案例
// 已经有一个已经打开的 socket 和一个设置好的响应报文
boost::asio::ip::tcp::socket socket;
beast::http::request<http::dynamic_body> rsp; // 使用 async_write() 进行异步写入
beast::async_write(socket, rsp, [](beast::error_code ec, std::size_t bytes_transferred) { // 处理完成后的逻辑 if(!ec) { // 写入成功 std::cout << "Wrote " << bytes_transferred << " bytes\n"; } else { // 写入失败 std::cerr << "Error: " << ec.message() << "\n"; } }
);
3.2异步读案例
#include <boost/beast/core.hpp>
#include <boost/beast/http.hpp>
#include <boost/asio/connect.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <cstdlib>
#include <iostream>
#include <string> namespace beast = boost::beast;
namespace http = beast::http;
namespace net = boost::asio;
using tcp = net::ip::tcp; // 你有一个已经连接的 socket 和一个用于接收数据的缓冲区
tcp::socket socket(io_context);
beast::flat_buffer buffer; // 异步读取数据
beast::async_read(socket, buffer, req, // 准备缓冲区以接收数据 [](beast::error_code ec, std::size_t bytes_transferred) { if(!ec) { // 读取成功,处理数据 std::cout << "Read " << bytes_transferred << " bytes\n"; //进行其他处理操作,例如分析get请求还是post} else { // 读取失败 std::cerr << "Error: " << ec.message() << "\n"; } }
);