【问题标题】:POCO Request timeout even when keepAlive is setPOCO 请求超时,即使设置了 keepAlive
【发布时间】:2014-08-01 05:30:42
【问题描述】:

我正在使用一个简单的 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<<exception.displayText();
    }

请让我知道我哪里错了。谢谢。

我在大约 2 分钟后得到状态 -1 Timeout。

【问题讨论】:

    标签: httprequest session-timeout poco-libraries


    【解决方案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);
    

    这对我有用!

    【讨论】:

    • 感谢您发布您的发现!这对我帮助很大。
    • 它有效。谢谢
    【解决方案2】:

    刚刚在处理Google Pub/Sub pull机制时搜索相同的TimeOut问题时发现了这个问题。

    发现可以设置会话的超时时间:

    session->setTimeout(Poco::Timespan(10, 0));
    

    必须在session-&gt;sendRequest(request)之前调用。

    【讨论】:

    • 它有效。谢谢
    猜你喜欢
    • 2021-08-28
    • 2023-03-26
    • 2021-11-23
    • 2011-09-27
    • 1970-01-01
    • 2017-06-20
    • 2013-05-12
    • 2011-04-25
    • 1970-01-01
    相关资源
    最近更新 更多