修改红绿灯http server,使用 lambda 表达式
This commit is contained in:
parent
9414555aa6
commit
46c23cc1dd
@ -5,12 +5,10 @@
|
||||
#include <boost/asio/signal_set.hpp>
|
||||
#include <boost/asio/strand.hpp>
|
||||
#include <boost/asio/bind_executor.hpp>
|
||||
#include <boost/asio/placeholders.hpp>
|
||||
#include <boost/beast/core.hpp>
|
||||
#include <boost/beast/http.hpp>
|
||||
#include <boost/beast/version.hpp>
|
||||
#include <boost/bind/bind.hpp>
|
||||
#include <boost/bind/placeholders.hpp>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
@ -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<TrafficLightSession>(
|
||||
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<TrafficLightSession>(
|
||||
std::move(socket),
|
||||
doc_root_,
|
||||
ioc_,
|
||||
system_
|
||||
)->run();
|
||||
}
|
||||
do_accept();
|
||||
}
|
||||
};
|
||||
|
||||
//---------------- TrafficLightHttpServer Implementation -------------------
|
||||
|
||||
Loading…
Reference in New Issue
Block a user