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协议有延迟的主要内容,如果未能解决你的问题,请参考以下文章