M QT t协议有延迟

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了M QT t协议有延迟相关的知识,希望对你有一定的参考价值。

参考技术A 有延迟。
MQTT是一种轻量级的、灵活的网络协议,致力于为IoT开发人员实现适当的平衡:这个轻量级协议可在严重受限的设备硬件和高延迟、带宽有限的网络上实现。
它的灵活性使得为IoT设备和服务的多样化应用场景提供支持成为可能,为了了解为什么MQTT如此适合IoT开发人员,我们首先来分析一下为什么其他流行网络协议未在IoT中得到成功应用。

Qt QNetworkAccessManager 发出完成信号的长时间延迟

【中文标题】Qt QNetworkAccessManager 发出完成信号的长时间延迟【英文标题】:Qt QNetworkAccessManager long delay to emit finished signal 【发布时间】:2014-06-23 10:23:21 【问题描述】:

我使用 QNAM 来处理使用 ftp 协议的上传。 整个过程有效,但我有一个奇怪的行为:

这是我的方法:

void ftp::uploadFile(const QString &origin, const QString &destination)

    QUrl url("ftp://"+host+""+destination);
    url.setUserName(user);
    url.setPassword(pwd);
    url.setPort(21);

    localFile = new QFile(origin, this);
    if (localFile->open(QIODevice::ReadOnly))
    
         reply = nam->put(QNetworkRequest(url), localFile);
         QObject::connect(reply, SIGNAL(uploadProgress(qint64, qint64)), SLOT(transferProgress(qint64, qint64)));        
         QObject::connect(reply, SIGNAL(finished()), this, SLOT(transferFinished()));
    
    else qDebug() << localFile->errorString();

当我上传文件时,会发出 uploadProgress :

qDebug() << sent << "/" << total;

输出 0/x 直到 x/x 。 然后需要很长时间,可能最多 20 秒才能发出完成的信号。 为什么会出现这种延迟?

当进度为sent==total 但文件在另一端已损坏时,我尝试忽略完成的信号并自己发出信号。 (它并没有真正损坏,因为我只发送 jpg,生成的文件只有上半部分 jpg。很大一部分只是灰色。)

我想为我的用户提供一个进度条,其中 100% 确实意味着流程已完成。 上传 5 秒,然后以 100% 的速度停留 20 秒并不是很好。

【问题讨论】:

运行在什么传输模式下?主动还是被动?很可能它已经完成了文件的上传,但 FTP 服务器没有给出确认码。 我觉得一般是在ftp服务器上设置了打开的模式。 【参考方案1】:

文件上传会在后台进行一些缓冲(qt 套接字缓冲区、系统套接字缓冲区、网络缓冲区),因此“进度”信号仅表示您将数据发送到某个地方,也没有服务器接收到它。 当所有传输到远程端的数据和缓冲区都被刷新时,会发出“完成”信号。如果您需要知道传输的确切大小,您可以寻找禁用请求或套接字或 qnam 缓冲/缓存。

【讨论】:

那么我怎样才能得到实际的进展呢?

以上是关于M QT t协议有延迟的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot - WebSocket

TCP 之上是不是有针对高吞吐量和低延迟进行优化的协议/标准?

开源协议

共识协议PBFT详细步骤

浅析低延迟直播协议设计:RTP/RTCP

Qt5 http协议 获取网页数据