From 46c23cc1dd6196ef0f269d2c224bee9cbc9542c8 Mon Sep 17 00:00:00 2001 From: Tian jianyong <11429339@qq.com> Date: Fri, 9 May 2025 15:07:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BA=A2=E7=BB=BF=E7=81=AFht?= =?UTF-8?q?tp=20server=EF=BC=8C=E4=BD=BF=E7=94=A8=20lambda=20=E8=A1=A8?= =?UTF-8?q?=E8=BE=BE=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/network/TrafficLightHttpServer.cpp | 56 +++++++++++++------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/network/TrafficLightHttpServer.cpp b/src/network/TrafficLightHttpServer.cpp index 35d3ac8..a6805a7 100644 --- a/src/network/TrafficLightHttpServer.cpp +++ b/src/network/TrafficLightHttpServer.cpp @@ -5,12 +5,10 @@ #include #include #include -#include #include #include #include #include -#include #include #include #include @@ -110,17 +108,19 @@ namespace network { system_(system_ref) {} void run() { - net::dispatch(strand_, boost::bind(&TrafficLightSession::do_read, shared_from_this())); + net::dispatch(strand_, [self = shared_from_this()]() { + self->do_read(); + }); } private: void do_read() { - req_ = {}; + req_ = {}; // 清空请求对象以便重用 http::async_read(socket_, buffer_, req_, net::bind_executor(strand_, - boost::bind(&TrafficLightSession::on_read, shared_from_this(), - boost::asio::placeholders::error, - boost::asio::placeholders::bytes_transferred) + [self = shared_from_this()](beast::error_code ec, std::size_t bytes_transferred) { + self->on_read(ec, bytes_transferred); + } )); } @@ -274,30 +274,30 @@ namespace network { void do_accept() { acceptor_.async_accept( net::bind_executor(acceptor_.get_executor(), - boost::bind(&TrafficLightListener::on_accept, shared_from_this(), - boost::asio::placeholders::error, - boost::placeholders::_2) + [self = shared_from_this()](beast::error_code ec, tcp::socket socket) { // socket 按值传递 + if (ec) { + if (ec == net::error::operation_aborted) { + return; // 服务器停止,不再接受 + } + Logger::error("Listener Accept Error: ", ec.message()); + // 对于其他错误,我们仍然尝试继续接受,除非 acceptor 关闭 + } else { + Logger::info("Accepted connection from ", socket.remote_endpoint()); + std::make_shared( + std::move(socket), // 从 lambda 的参数 socket 移动 + self->doc_root_, // 访问 listener 的成员 + self->ioc_, // 访问 listener 的成员 + self->system_ // 访问 listener 的成员 + )->run(); + } + + if (self->acceptor_.is_open()) { + self->do_accept(); // 继续接受下一个连接 + } + } ) ); } - - void on_accept(beast::error_code ec, tcp::socket&& socket) { - if (ec) { - if (ec != net::error::operation_aborted) - Logger::error("Listener Accept Error: ", ec.message()); - return; - } else { - // 移除连接数检查简化注释 - Logger::info("Accepted connection from ", socket.remote_endpoint()); - std::make_shared( - std::move(socket), - doc_root_, - ioc_, - system_ - )->run(); - } - do_accept(); - } }; //---------------- TrafficLightHttpServer Implementation -------------------