Я сделал простую тестовую программу, но результаты немного разочаровывают. Сигнал ReadyRead() слишком медленный. По какой-то причине я получаю задержки более 1 или 2 мс на каждые 2-4 сигнала.
Я сделал простой счетчик пакетов и сравнил его с тем, что вижу в Wireshark. Конечно же, происходит потеря пакетов.
Что я могу сделать, чтобы повысить производительность? Или, может быть, это просто предел цикла событий Qt?
Я запускаю его с помощью Qt Creator 4.10.0. В Windows 7.
Обновление: С вашими советами: попробовал:
- Перемещение сокета в другую ветку. Это дает немного больше производительности
.. совсем немного - LowDelayOption = 1 — я не заметил никаких изменений
ReceiveBufferSizeSocketOption — никаких изменений не заметил - QDebug при чтении не использовался — не проверял, просто использую для
коллекционирование статистика
#ifndef UDPPROC_H
#define UDPPROC_H
#include "QObject"
#include "QUdpSocket"
#include "QHostAddress"
#include "QThread"
#include "QDebug"
#include "networker.h"
class UDPProc : public QObject
{
Q_OBJECT
public:
UDPProc();
~UDPProc();
private:
QUdpSocket dataServerSocket;
NetWorker* netWorker;
QThread netThread;
};
#endif // UDPPROC_H
udpproc.cpp
UDPProc::UDPProc()
{
netWorker = new NetWorker(&dataServerSocket);
netWorker->moveToThread(&netThread);
netWorker->getInnerLoop()->moveToThread(&netThread);
connect(&netThread, SIGNAL(started()), netWorker, SLOT(serverSocketProccessing()));
connect(&this->dataServerSocket, SIGNAL(readyRead()), netWorker->getInnerLoop(), SLOT(quit()));
QString address = "127.0.0.3:16402";
QHostAddress ip(address.split(":").at(0));
quint16 port = address.split(":").at(1).toUShort();
dataServerSocket.bind(ip, port);
//dataServerSocket.setSocketOption(QAbstractSocket::LowDelayOption, 1);
dataServerSocket.moveToThread(&netThread);
netThread.start();
//dataServerSocket.setSocketOption(QAbstractSocket::ReceiveBufferSizeSocketOption, 128000);
//qDebug()pendingDatagramSize());
}
if (times.size() >= 10000){
long long sum = 0;
for (int x : times){
//qDebug()
Подробнее здесь: https://stackoverflow.com/questions/585 ... nviroments