You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

restc-cpp库中PUT请求设置超时时间的方法咨询

restc-cpp库中PUT请求设置超时时间的方法咨询

嗨,我来帮你搞定restc-cpp里PUT请求的超时设置问题!其实这个库是支持超时配置的,只是文档可能没太突出说明,我给你两种常用的实现方式,你可以根据需求选:

方式一:针对单个PUT请求单独设置超时

这种方式适合给某一个特定请求设置专属超时,不会影响其他请求。你只需要在RequestBuilder的调用链里添加.WithTimeout()方法即可,直接指定超时时长:

auto rest_client = RestClient::Create();

auto done = rest_client->ProcessWithPromise([&mess, AI_IP, AI_port, Auth_token](Context& ctx){
    // 修改RequestBuilder部分,添加超时设置
    auto reply = RequestBuilder(ctx)
        .Put("http://" + AI_IP + ":" + std::to_string(AI_port) + "/")
        .Data(mess)
        .WithTimeout(std::chrono::seconds(10))  // 这里设置10秒超时,可按需调整
        .Execute();
});

try
{
    done.get();
}
catch(const exception& ex)
{
    // 捕获超时等异常并处理
    cerr << "请求出错:" << ex.what() << endl;
}
catch(const boost::exception& ex)
{
    cerr << "Boost异常:" << boost::diagnostic_information(ex) << endl;
}
RESTC_CPP_IN_COROUTINE_CATCH_ALL
{
    cerr << "协程异常" << endl;
}

方式二:给整个RestClient设置全局默认超时

如果你的大部分请求都需要统一的超时规则,可以在创建RestClient的时候通过Options配置默认的连接超时和请求总超时,这样所有通过这个客户端发起的请求都会自动应用这个规则:

// 创建RestClient时配置全局超时
auto rest_client = RestClient::Create(
    RestClient::Options{}
    .SetConnectTimeout(std::chrono::seconds(5))  // TCP连接建立的超时时间
    .SetRequestTimeout(std::chrono::seconds(15)));  // 从请求发起到收到响应的总超时时间

auto done = rest_client->ProcessWithPromise([&mess, AI_IP, AI_port, Auth_token](Context& ctx){
    auto reply = RequestBuilder(ctx)
        .Put("http://" + AI_IP + ":" + std::to_string(AI_port) + "/")
        .Data(mess)
        .Execute();
});

// 后续的异常捕获逻辑和你原来的代码一致
try
{
    done.get();
}
catch(const exception& ex)
{
    ...
}
catch(const boost::exception& ex)
{
    ...
}
RESTC_CPP_IN_COROUTINE_CATCH_ALL
{
    ...
}

额外说明:

  • SetConnectTimeout:控制的是TCP握手阶段的超时时间,也就是客户端尝试和服务器建立连接的最长等待时间
  • SetRequestTimeout:控制的是整个请求生命周期的总超时,包括连接建立、发送请求数据、等待服务器响应的全部过程
  • 如果你同时设置了全局超时和单个请求的.WithTimeout(),单个请求的超时设置会优先生效
  • 超时时间的单位可以灵活调整,比如用std::chrono::milliseconds(500)表示500毫秒,std::chrono::minutes(1)表示1分钟,按需选择就行

这样设置后,当请求超过指定时间还没完成,就会抛出超时异常,你可以在catch块里捕获并处理~

火山引擎 最新活动