修改红绿灯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/signal_set.hpp>
|
||||||
#include <boost/asio/strand.hpp>
|
#include <boost/asio/strand.hpp>
|
||||||
#include <boost/asio/bind_executor.hpp>
|
#include <boost/asio/bind_executor.hpp>
|
||||||
#include <boost/asio/placeholders.hpp>
|
|
||||||
#include <boost/beast/core.hpp>
|
#include <boost/beast/core.hpp>
|
||||||
#include <boost/beast/http.hpp>
|
#include <boost/beast/http.hpp>
|
||||||
#include <boost/beast/version.hpp>
|
#include <boost/beast/version.hpp>
|
||||||
#include <boost/bind/bind.hpp>
|
#include <boost/bind/bind.hpp>
|
||||||
#include <boost/bind/placeholders.hpp>
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@ -110,17 +108,19 @@ namespace network {
|
|||||||
system_(system_ref) {}
|
system_(system_ref) {}
|
||||||
|
|
||||||
void run() {
|
void run() {
|
||||||
net::dispatch(strand_, boost::bind(&TrafficLightSession::do_read, shared_from_this()));
|
net::dispatch(strand_, [self = shared_from_this()]() {
|
||||||
|
self->do_read();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void do_read() {
|
void do_read() {
|
||||||
req_ = {};
|
req_ = {}; // 清空请求对象以便重用
|
||||||
http::async_read(socket_, buffer_, req_,
|
http::async_read(socket_, buffer_, req_,
|
||||||
net::bind_executor(strand_,
|
net::bind_executor(strand_,
|
||||||
boost::bind(&TrafficLightSession::on_read, shared_from_this(),
|
[self = shared_from_this()](beast::error_code ec, std::size_t bytes_transferred) {
|
||||||
boost::asio::placeholders::error,
|
self->on_read(ec, bytes_transferred);
|
||||||
boost::asio::placeholders::bytes_transferred)
|
}
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -274,30 +274,30 @@ namespace network {
|
|||||||
void do_accept() {
|
void do_accept() {
|
||||||
acceptor_.async_accept(
|
acceptor_.async_accept(
|
||||||
net::bind_executor(acceptor_.get_executor(),
|
net::bind_executor(acceptor_.get_executor(),
|
||||||
boost::bind(&TrafficLightListener::on_accept, shared_from_this(),
|
[self = shared_from_this()](beast::error_code ec, tcp::socket socket) { // socket 按值传递
|
||||||
boost::asio::placeholders::error,
|
if (ec) {
|
||||||
boost::placeholders::_2)
|
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 -------------------
|
//---------------- TrafficLightHttpServer Implementation -------------------
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user