aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/http/client/scheduler.h
blob: 6700d7cee90d5f9b70ee8eff2c1a2d18ffe3a936 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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_;
    };

}