diff options
author | qrort <qrort@yandex-team.com> | 2022-11-30 23:47:12 +0300 |
---|---|---|
committer | qrort <qrort@yandex-team.com> | 2022-11-30 23:47:12 +0300 |
commit | 22f8ae0e3f5d68b92aecccdf96c1d841a0334311 (patch) | |
tree | bffa27765faf54126ad44bcafa89fadecb7a73d7 /library/cpp/http/client/scheduler.h | |
parent | 332b99e2173f0425444abb759eebcb2fafaa9209 (diff) | |
download | ydb-22f8ae0e3f5d68b92aecccdf96c1d841a0334311.tar.gz |
validate canons without yatest_common
Diffstat (limited to 'library/cpp/http/client/scheduler.h')
-rw-r--r-- | library/cpp/http/client/scheduler.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/library/cpp/http/client/scheduler.h b/library/cpp/http/client/scheduler.h new file mode 100644 index 00000000000..6700d7cee90 --- /dev/null +++ b/library/cpp/http/client/scheduler.h @@ -0,0 +1,47 @@ +#pragma once + +#include "request.h" + +#include <util/generic/ptr.h> +#include <util/generic/queue.h> +#include <util/generic/strbuf.h> +#include <util/system/mutex.h> + +namespace NHttp { + using namespace NHttpFetcher; + + // Асинхронный механизм скачивания. + // Несколько документов одновременно. + // - несколько потоков + // - контроль нагрузки на хост => один объект на приложение. + // Редиректы + // Отмена запроса по таймеру. + + class IHostsPolicy { + public: + virtual ~IHostsPolicy() = default; + + //! Максимальное количество одновременных соединений к хосту. + virtual size_t GetMaxHostConnections(const TStringBuf& host) const = 0; + }; + + //! Управляет процессом скачивания документа по заданному урлу. + class TScheduler { + // host loading + // redirects + public: + TScheduler(); + + //! Получить запрос на скачивание. + TFetchRequestRef Extract(); + + //! Поместить запрос в очередь на скачивание. + void Schedule(TFetchRequestRef req); + + private: + THolder<IHostsPolicy> HostsPolicy_; + TMutex Lock_; + TQueue<TFetchRequestRef> RequestQueue_; + }; + +} |