从asio处理程序生成新的异步请求

Spawning new async request from an asio handler

本文关键字:异步 请求 程序生成 asio 处理      更新时间:2023-10-16

我正在尝试使用ASIO,并认为一个好的第一个项目应该是一个简单的网络爬虫:下载一个html页面,找到其中的链接,下载所有链接。

我已经尝试修改ASIO http客户端示例,使用enable_shared_from_this而不是原始指针,这样我就可以在前一个任务的处理程序中生成新的异步任务,而不必担心在工作过程中删除资源。

当我试图将我的客户端子类化以不同的方式处理不同的页面时,问题就开始了。编译器抱怨shared_ptr的类型与this的类型不匹配。

有人知道这是怎么解决的吗?我还没能自己想清楚。

这与Asio无关。

如果您从enable_shared_from_this继承了一个基类,但在派生的基类中需要它,请使用boost::static_pointer_cast:

struct base : enable_shared_from_this<base>
{
};
struct derived : base
{
  shared_ptr<derived> shared_from_derived()
  {
    return static_pointer_cast<derived>(shared_from_this());
  }
};