gpt4 book ai didi

c++ - 使用 Boost.Asio 异步下载 URL 列表

转载 作者:太空狗 更新时间:2023-10-29 21:18:14 28 4
gpt4 key购买 nike

我是异步编程和 Boost.Asio 的新手。我有一个基本问题。有一个 exampleboost.org 上。我想用它来下载链接列表。以下是http异步客户端的客户端代码。

int main(int argc, char* argv[]) {
try {
if (argc != 3) {
...
return 1;
}

boost::asio::io_service io_service;
client c(io_service, argv[1], argv[2]);
io_service.run();
}
catch (std::exception& e) {
std::cout << "Exception: " << e.what() << "\n";
}
return 0;
}

我看到了如何使用此代码下载 URL。但是,我不知道如何异步(同时编辑:?)下载 URL 列表。您能帮我更改此代码以达到此目的吗?

最佳答案

有一个Urdl Boost.Asio 的作者 Christopher M. Kohlhoff 的 HTTP 客户端库。

这个库有一个允许异步操作的read_stream类。根据documentation它看起来像这样:

#include <urdl/read_stream.hpp>

boost::asio::io_service io_service;
// run io_service some way

urdl::read_stream in(io_service);
std::ostream& out = std::cout;
char data[1024];

void open_handler(boost::system::error_code const& ec);
void read_handler(boost::system::error_code const& ec, std::size_t length);

in.async_open("http://example.com/path", open_handler);


void open_handler(boost::system::error_code const& ec)
{
if (!ec)
{
in.async_read_some(boost::asio::buffer(data), read_handler);
}
}

void read_handler(boost::system::error_code const& ec, std::size_t length)
{
if (!ec)
{
out.write(data, length);
in.async_read_some(boost::asio::buffer(data), read_handler);
}
}

关于c++ - 使用 Boost.Asio 异步下载 URL 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30532407/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com