.net中的低优先级http上传

Nir*_*Nir 20 .net c# http

我正在编写一个上传大量数据的程序,我需要限制它对网页浏览和其他用户活动的干扰.

上传由许多单独传输的大型文件组成,连接必须是标准HTTP POST(我无法控制服务器),我需要控制HTTP头(服务器使用它们进行身份验证和元数据)

当用户不再使用互联网时,上传将恢复全速非常重要,否则它将永远不会完成(我预计它将需要以全速运行一周或更长时间才能完成).

我想通过某种方式解决这个问题,使我的HTTP连接优先级低,检测打开的浏览器窗口并减慢速度并不能解决问题,因为(a)用户可能正在使用非浏览器应用程序(FTP,Twitter客户端,电子邮件)等等)和(b)如果有一个开放的闲置Web浏览器窗口,我不想放慢速度.

我找到了BITS,但我认为它与我无关,因为我需要它作为标准的HTTP POST.

我正在使用.net 3.5,该程序是用C#编写的,我目前正在使用HttpWebRequest进行上传.

澄清:我正在编写将在家中的客户个人计算机上运行的消费者软件.我的beta测试人员抱怨说,当他们运行我的程序时互联网很慢(可以理解,因为我正在使用他们所有的带宽)所以我想给其他程序更高的优先级,所以他们的互联网不再慢.

没有花哨的网络基础设施可以优先处理网络上的数据包,也没有IT团队可以安装和配置任何东西,我预计大多数客户都会有一个便宜的无线路由器,他们可以从他们的ISP免费获得

N0A*_*ias 6

同时使用System.Net.NetworkInformation.IPv4InterfaceStatistics类的bytesSent属性以给定的间隔跟踪应用程序发送的字节数和网络上发送的总字节数.从网络上发送的总字节数(在同一时间间隔内)中减去应用在该时间间隔内发送的总字节数.如果差异足够高,您需要限制上传,请执行此操作.一旦差异变得足够小,就开始上传.


Dan*_*dor 5

我希望你能解决问题的限制,所以你只需要知道两件事:

  • 什么时候降低上传速度

  • 如何减少它

现在,使用其他API也许没问题,但是为什么要学习它们并介绍所有新的bug生成器,当你可以做一些更简单的事情时.

现在 - 上传大多数互联网连接(比如说ADSL)的问题是它们消耗的珍贵UPLOAD非常有限,比如256-512k.用户可能会报告问题,因为您的上传正在查杀他们发送的请求,因此他们无法获取任何数据.

我建议你做两件事......解决问题,做到这一点:

  • 为您的Web服务器创建简单的GET请求
  • 通过读取对结束的响应来测量服务器完全处理和响应所需的时间
  • 为"忙"和"免费"连接使用一个截止值,或者为每个客户测量时间并计算它们的截止值
  • 如果时间更长,你很忙,做扼流,否则,全速前进
  • 你可以尽可能多地重复这一点 - 例如每分钟

要解决多少是另一个问题.首先,您应该测量当其他人没有使用连接时您可以上传多少 - 您的每个客户端的基线上传速度.然后,使用WHEN技术,您可以降低上传速度,直到获得适用于其连接的"免费"结果.

希望我明确表示 - 询问是否需要澄清.

编辑:

还有很多事情需要考虑:

  1. 通过POST发送二进制数据是浪费的,因为所有内容都是在BASE64中编码的.您应该检查一些其他上传方式.
  2. 对Web服务器的限制可能是个问题,因为如果你慢慢上传大块数据,服务器可能会超时
  3. 如果你结合1 + 2,你可以设计一个计划,可以将数据拼接成块,比如说1KB或更多,然后逐个发送.如果你以序列化方式进行,它本身就可以解决你的限制问题.