如何使用Qt检查Web服务是否已启动

How to check if webservice is up, using Qt

本文关键字:是否 启动 服务 Web 何使用 Qt 检查      更新时间:2023-10-16

我写了一些代码来监视SOAP Web服务。基本上,它使用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 条件以包括错误检查

检查网络回复内容是否为空以确保 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 服务端的请求处理或请求/响应传输出现问题。