Я хочу написать клиент REST. В настоящее время я использую REST-сервер на локальном хосте. При этом предоставляются JSON отформатированные данные, с клиентом, я хочу их прочитать.
Я использую Microsoft cpprestsdk (https://github.com/microsoft/cpprestsdk/)
Это мой пример кода:
pplx::task<void> request(web::uri request_uri)
{
http_request request(methods::GET);
request.headers().set_content_type(L"application/json");
request.set_request_uri(request_uri);
return client.request(request)
.then([](http_response response)
{
if (response.status_code() == status_codes::OK)
{
return response.extract_json();
}
else
{
return pplx::task_from_result(json::value());
}
}).then([](pplx::task<json::value> previousTask)
{
try
{
json::value const& value = previousTask.get();
PrintJson(value);
}
catch (http_exception const& e)
{
std::wcout << e.what() << std::endl;
}
});
}
int main(int arc, char* argv[])
{
while (true)
{
pplx::task<void> requ = request(web::uri(L"/getjson"));
requ.wait();
std::this_thread::sleep_for(std::chrono::seconds(1));
}
return 0;
}
Код прекрасно работает в то время как l oop, печать и чтение данных JSON снова и снова. req.wait()
задерживает основной поток до получения ответа http, позже я хочу от него избавиться. (и запустить его асинхронно)
Моя проблема в том, что в среднем время запроса / ответа составляет от 30 до 100 мс, что абсолютно нормально. Но в некоторых случаях задержка становится очень длинной (до 5 минут).
Я проверил сетевой трафик c с помощью акулы провода. При возникновении ошибки было получено последнее ответное сообщение и отправлено подтверждение. Но затем каким-то образом сама задача задерживается, после этой задержки отправляется следующий запрос (http GET), а затем по истечении среднего времени запроса / ответа выполняется задача.
Ошибка возникает после неизвестный период времени. Даже если я убиваю / перезагружаю программное обеспечение в пределах задержки, задача не идет прямо.
Я предполагаю, что проблема в планировщике задач или самой ОС? Может кто знает задачи pplx?
Заранее спасибо.
PS: Я также получаю задержки с примером (bingrequest) кода cpprestsdk: https://github.com/microsoft/cpprestsdk/blob/master/Release/samples/BingRequest/bingrequest.cpp, который очень похож