Session类主要方法解读:
DoRead()
方法解读
void DoRead() {
auto self(shared_from_this());
socket_.async_read_some(boost::asio::buffer(data_, max_length),
[this, self](boost::system::error_code ec, std::size_t length) {
if (!ec) {
std::cout << "Received: " << std::string(data_, length) << std::endl;
DoWrite(length);
}
});
}
(1)auto self(shared_from_this())
-
这里使用了
shared_from_this()
,它是std::enable_shared_from_this
的一个方法,用于获取当前对象的shared_ptr
。 -
目的是确保在异步操作完成之前,当前
Session
对象不会被销毁。因为异步操作的回调函数可能会在未来的某个时刻执行,如果对象已经被销毁,会导致未定义行为。 -
self
是一个shared_ptr
,它延长了当前对象的生命周期。
(2)socket_.async_read_some()
-
这是一个异步读操作,从套接字中读取数据。
-
参数:
-
boost::asio::buffer(data_, max_length)
:指定一个缓冲区(data_
)来存储读取的数据,缓冲区的大小为max_length
。 -
回调函数:当读取操作完成时,会调用这个回调函数。
-
(3)回调函数
-
回调函数的签名为:
[this, self](boost::system::error_code ec, std::size_t length)