【问题标题】:How to check if webservice is up, using Qt如何使用 Qt 检查 Web 服务是否已启动
【发布时间】:2012-11-20 18:45:15
【问题描述】:

我编写了一些代码来监控 SOAP 网络服务。基本上它使用 QNetworkAccessManager 向 web 服务地址发送 HTTP GET 请求,如果收到响应,那么我知道服务已经启动。我认为这是可行的,但每隔一段时间(每隔几天一次)我会收到一条通知,说服务器已关闭,然后下次检查时它会再次启动。所以服务器实际上并没有关闭,请求发生了一些事情。我想知道是否有更好的方法来监控 web 服务,下面是一些伪代码来展示我所做的:

main{
    Qtimer timer;
    connect(timer, SIGNAL(timeout()), this, SLOT(send()));
    timer.start(300000);
}

send(){
    QNetworkAccessManager *qnam;
    connect(qnam, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*));
    qnam.get("https://testWebservice.com/TEST/webservice");
}

requestFinished(QNetworkReply *reply){
    QByteArray data = reply.getData();
    if(reply.error == some sort of error indicating server is down, or if reply == empty){
        ***SERVER DOWN***
    }
    else{
        ***SERVER UP***
    }
}

编辑 更改了 if 条件以包括错误检查

【问题讨论】:

    标签: c++ web-services qt http networking


    【解决方案1】:

    在一般情况下,检查网络回复内容是否为空以确保 web 服务已关闭在我看来并不是一个好的解决方案。

    我建议使用QNetworkReply::error() 方法来检查是否发生错误。 详情请见http://doc.qt.digia.com/qt/qnetworkreply.html#error

    更新 没有提到如何从QNetworkReply 对象获取回复数据。我认为使用了QIODevice::readAll/read() 之类的东西。如果是这样,那么空数据回复并不意味着服务器端发生了错误。参见例如http://doc.qt.digia.com/qt/qiodevice.html#readAll

    当没有网络错误但回复数据意外为空时,我会假设 web 服务已启动,但 web 服务端的请求处理或请求/响应传输出现问题。

    【讨论】:

    • if 语句是通用的..即如果(没有错误)等也很容易......
    • 当您的代码报告错误时,您得到的确切错误状态是什么?
    猜你喜欢
    • 2012-02-17
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多