[/
    Copyright (c) 2019 Vinnie Falco (vinnie dot falco at gmail dot com)

    Distributed under the Boost Software License, Version 1.0. (See accompanying
    file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

    Official repository: https://github.com/boostorg/beast
]

[section:RatePolicy 速率策略]

`RatePolicy` 的实例与 [link beast.ref.boost__beast__basic_stream `basic_stream`] 相关联，用于控制独立发送和接收字节的速率。这可用于实现细粒度的带宽管理和流量控制。

[heading 关联类型]

* [link beast.ref.boost__beast__rate_policy_access `rate_policy_access`]

[warning
    这些要求可能会发生不向后兼容的变更。
    changes in subsequent versions.
]

[heading 要求]

在下表中：

* `P` 表示一个满足 [*RatePolicy] 要求的类型。
* `x` 表示一个类型为 `P` 的将亡值（xvalue）。
* `a` 表示一个类型为 `P` 的值。
* `n` 表示一个类型为 `std::size_t` 的值。

[table 有效表达式
[[表达式] [类型] [语义，前置/后置条件]]
[
    [`P a(x)`]
    []
    [要求满足 ['MoveConstructible]。]
][
    [`friend rate_policy_access`]
    []
    [`P` 中要求的成员函数应当是私有的。[link beast.ref.boost__beast__rate_policy_access `rate_policy_access`] 必须是 `P` 的友元，以便实现能够访问这些必需的成员函数。]
][
    [`a.available_read_bytes()`]
    [`std::size_t`]
    [实现会调用此函数，以确定下一次读取操作允许传输的最大字节数。随后实际传输的字节数可能会小于该数值。

如果该策略返回零值，读取操作将异步等待直到下一个计时器间隔再进行重试。当重试发生时，此函数将再次被调用。]
][
    [`a.available_write_bytes()`]
    [`std::size_t`]
    [实现会调用此函数，以确定下一次写入操作允许传输的最大字节数。随后实际传输的字节数可能会小于该数值。
如果该策略返回零值，写入操作将异步等待直到下一个计时器间隔再进行重试。当重试发生时，此函数将再次被调用。]
][
    [`a.transfer_read_bytes(n)`]
    []
    [实现会调用此函数，以通知策略在最近一次读取操作中已成功传输了 `n` 个字节。策略对象可以选择性地利用此信息来计算吞吐量，和/或用于优化后续查询传输最大值时所使用的算法。]
][
    [`a.transfer_write_bytes(n)`]
    []
    [实现会调用此函数，以通知策略在最近一次写入操作中已成功传输了 `n` 个字节。策略对象可以选择性地利用此信息来计算吞吐量，和/或用于优化后续查询传输上限时所使用的算法。]
][
    [`a.on_timer()`]
    []
    [每当内部计时器到期时，实现都会调用此函数。策略对象可以选择性地利用此机会来计算已用时间和吞吐量，和/或用于优化后续查询传输上限时所使用的算法。]
]]

[heading 示例]

[concept_RatePolicy]

[heading 模型]

* [link beast.ref.boost__beast__simple_rate_policy `simple_rate_policy`]
* [link beast.ref.boost__beast__unlimited_rate_policy `unlimited_rate_policy`]

[endsect]
