找人做seo要给网站程序,学做网站学费,图片外链生成器,网站结构分析怎么做文章目录 1.beast网落库介绍2.相关类及api3.异步读写的处理3.1异步写案例3.2异步读案例 1.beast网落库介绍 Beast网络库是一个基于Boost库的C网络库#xff0c;特别用于开发高性能的网络应用程序。它提供了一组易于使用的API#xff0c;主要用于处理HTTP和WebSocket协议… 文章目录 1.beast网落库介绍2.相关类及api3.异步读写的处理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_parserisRequest 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::requesthttp::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; } }
);