[英]Sending data from client to server response_tak = client.request(req) I want to add timeout functionality if response doesn't come in particular time
utility::string_t url = U("http://localhost:8080/api/v1/post_info");
web::uri uri1( url);
web::http::client::http_client client( uri1);
web::http::http_request request;
pplx::task<web::http::http_response> response_task;
web::http::http_response response;
request.set_method( web::http::methods::POST);
request.set_body(jsondata);
response_task = client.request(request);
response = response_task.get();
如果响应不是来自client.request(request);
或者如果花费太多时间,那么 My.exe 将继续等待? 所以我该怎么做?
web::http::client::http_client::http_client( const uri &base_uri, const http_client_config &client_config );
在 cpprestsdk 库中有这个 function 但没有太多关于这个http_client_config
类的utility::seconds web::http::client::http_client_config::timeout()const
function。
您可以通过创建 http_client_config object 并使用void web::http::client::http_client_config::set_timeout ( const T & timeout )
为所有请求设置超时, 文档。 然后你需要将配置 class 作为第二个参数传递给构造函数,使用你提到的方法web::http::client::http_client::http_client( const uri &base_uri, const http_client_config &client_config );
class pplx::task<web::http::http_response>
是异步的,如果你直接调用.Get()
它将被阻塞。 您应该检查响应是否已经存在
bool done = resp.is_done();
或使用回调 function
resp.then([=](pplx::task<web::http::http_response> task)
{
web::http::http_response response = task.get();
...
});
如果 is_done() 返回 false,调用 get() 将有阻塞线程的风险,这首先违背了使用异步 API 的目的(它将阻止 GUI 刷新和服务器缩放)。 对于这种情况,我们需要采取不同的方法:将处理程序 function 附加到任务,任务完成后将调用该处理程序。 我们使用 then() function 来做到这一点
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.