我正在使用一个简单的Get请求来从服务器获取通知.我希望请求持续到服务器收到响应(可能是1到9个小时).但我面临2分钟内请求超时的问题.我将会话和请求都设置为"keepalive".但它没有帮助.我也尝试过使用setKeepAliveTimeout并给它一个很大的值.但这也没有改变任何东西.以下是我使用的代码:
try{ //Prepare request Poco::URI uri(url); const Poco::Net::Context::Ptr context = new Poco::Net::Context(Poco::Net::Context::CLIENT_USE, "", "", "", Poco::Net::Context::VERIFY_NONE, 9, false, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), context); session.setKeepAlive(true); // prepare path std::string path(uri.getPathAndQuery()); if (path.empty()) { path = "/"; } // send request Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_GET, path, Poco::Net::HTTPMessage::HTTP_1_1); req.setKeepAlive(true); session.sendRequest(req); // Get response Poco::Net::HTTPResponse res; //Get status code statusCode = res.getStatus()); //Get status status = res.getReason(); //Get body std::istream &inStream = session.receiveResponse(res); std::ostringstream outStringStream; outStringStream << inStream.rdbuf(); response = outStringStream.str(); } catch(Poco::Exception& exception) { cout<请让我知道我错在哪里.谢谢.
我在大约2分钟内获得状态-1超时.
这个问题现在有些陈旧,但我有答案,花了一些时间才找到它.
这不是您想要更改的keepAlive设置,因为这只会保持请求之间的连接打开.
一旦你提出了请求
session.sendRequest(req);
(即,一旦建立了会话的底层套接字),获取会话的套接字引用并更改接收超时,即:
StreamSocket &str = session.socket(); // Create a timespan of (e.g.) 600 secs (10 mins) Timespan ts(600L, 0L); str.setReceiveTimeout(ts);
这对我有用!