mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-10-09 21:03:18 +00:00
Drop the spaces between Japanese text and inline code or alphanumerics in the tour and the few other pages that still had them, and reword sentences that read awkwardly. The client compression page now lists Zstd alongside zlib and Brotli.
2.0 KiB
2.0 KiB
title, order, status
| title | order | status |
|---|---|---|
| C13. 全体タイムアウトを設定する | 13 | draft |
C12. タイムアウトを設定するで紹介した3種類のタイムアウトは、いずれも「1回のsendやrecv」に対するものです。リクエスト全体の所要時間に上限を設けたい場合は、set_max_timeout()を使います。
基本の使い方
httplib::Client cli("http://localhost:8080");
cli.set_max_timeout(5000); // 5秒(ミリ秒単位)
auto res = cli.Get("/slow-endpoint");
ミリ秒単位で指定します。リクエストを始めてからこの時間が過ぎると、レスポンスを待っている途中でも打ち切られます。ただし、接続や送信で待たされる時間まで短くなるわけではありません。そちらはset_connection_timeoutとset_write_timeoutで調整します。
std::chronoで指定する
こちらにも、std::chronoの期間を受け取るオーバーロードがあります。
using namespace std::chrono_literals;
cli.set_max_timeout(5s);
どう使い分けるか
set_read_timeoutは「データが来ない時間」のタイムアウトなので、少しずつデータが流れ続ける状況では発火しません。たとえば1秒ごとに1バイト届くようなエンドポイントは、set_read_timeoutをいくら短くしてもタイムアウトしません。
一方、set_max_timeoutは「経過時間」に対する上限なので、こうしたケースでも確実に止められます。外部APIを叩くときや、ユーザーを待たせすぎたくないときに重宝します。
cli.set_connection_timeout(3s);
cli.set_read_timeout(10s);
cli.set_max_timeout(30s); // 全体で30秒を超えたら中断
Note:
set_max_timeout()は通常のタイムアウトと併用できます。短期的な無反応はset_read_timeoutで、長時間の処理はset_max_timeoutで、という二段構えにするのが安全です。