gpt4 book ai didi

c++ - 如何限制应用程序的上传速度?

转载 作者:可可西里 更新时间:2023-11-01 10:14:36 25 4
gpt4 key购买 nike

我正在使用 QNetworkAccessManager 上传这样的文件(和一些数据):

QNetworkRequest request(<some URL>);
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
<multipart is filled with single parts>

networkAccessManager->post(request, multiPart);

效果很好。但是,用户报告说上传会影响他们的上传带宽。这……当然是有道理的;)

现在,我想实现一些东西来限制这个帖子请求的上传速度。然而,环顾四周后,我发现根本没有任何简单的方法可以做到这一点。

QNetworkReply 有 setReadBufferSize,但没有等效的写入。不添加那似乎是一个明显的错误......

我找到了这个东西:http://doc.qt.io/qt-5/qtnetwork-torrent-example.html
并尝试根据我的需要调整它的一些类。然而,这一切都失败了,因为我找不到中断数据写入的方法(比正常情况下做起来慢)。该示例依赖于用户自己编写代码——但这在这里是不可能的,因为 Qt 在内部会在发布请求后写入数据。

我也尝试过使用 Windows API 流量控制,但它只能用于限制完整的网络接口(interface)或检查数据包,而不是特定的应用程序。另外,这几乎没有示例,只有一些古老的代码片段。不完全是我想要的...

有没有什么方法可以完全限制上传而不必重写 Qt 源代码(我不会这样做)?
一种“全局”限制应用程序上传速度的方法也是可以接受的,使用 Windows API 代码或任何东西,真的,只要它在代码中是可能的。

附加信息:
限制用户计算机的上传速度是可以接受的。它必须只限制特定的应用程序。类似于您可以使用 NetLimiter 执行的操作。

最佳答案

我会尝试这种方式:QHttpMultiPart 使用 QHttpPart 元素作为数据 block 。 QHttpPartQHttpPart::setBodyDevice( QIODevice * device ) 来设置它的数据提供者。创建您自己的 QIODevice 提供程序并控制其中的数据带宽。

编辑:QNetworkAccessManager 更通用的解决方案是为 QNetworkAccessManager::post( const QNetworkRequest & request, QIODevice * data ) 提供 QIODevice 并控制带宽那里。

另见 this proposed solution

关于c++ - 如何限制应用程序的上传速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44906835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com