QNetworkAccessManager :: put太慢了

时间:2016-08-26 15:07:37

标签: qt qnetworkaccessmanager

我正在编写像ab这样的小程序来测试我的小型休息网络服务。我的应用程序每秒可以产生大约200-300个请求,但是ab可以大约8k-9k(在同一台机器上)。经过小规模调查后我发现了问题 - 如果我使用空的QByteArray,它可以快速运行。这是代码:

// simplesender.h
#ifndef SIMPLESENDER_H
#define SIMPLESENDER_H
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QQueue>

#include <QObject>

class SimpleSender : public QObject
{
    Q_OBJECT
public:
    explicit SimpleSender(QObject *parent = 0)
    {
        connect(&qnam, &QNetworkAccessManager::finished, this, &SimpleSender::slFinished);
        url = QUrl("http://localhost:8080");
        m_in_progress = 0;
        sendHttpRequest();
    }

private slots:
    void slFinished(QNetworkReply *reply)
    {
        QByteArray b = reply->readAll();
        Q_UNUSED(b);
        m_in_progress--;
        sendHttpRequest();
        reply->deleteLater();
    }

private:
    int m_in_progress;
    QUrl url;

    QNetworkAccessManager qnam;
    void sendHttpRequest()
    {
        while (m_in_progress < 10) {
            QNetworkRequest r(url);
            QByteArray bb = QByteArray("t"); // with this line 200 r/s
            //QByteArray bb; // with this line 8k r/s
            qnam.put(r, bb);

            m_in_progress++;
        }
    }

};

#endif // SIMPLESENDER_H

在main.cpp

#include <simplesender.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    SimpleSender hs(&a);
    return a.exec();
}

我的问题是如何提高效果。

0 个答案:

没有答案