我有一个非常基本的文件下载,它从英国连接到美国。该文件约为10MB,连接速度很快,但延迟为80ms。
由于延迟时间长,是否有任何方法可以减少TCP层的确认窗口以减少发生的聊天情况?
' Download a Large PDF
Using client As New System.Net.WebClient()
Dim url As String = "doc url"
Dim beginTime As DateTime = DateTime.Now
client.Credentials = System.Net.CredentialCache.DefaultCredentials
client.DownloadFile(url, "TMP.ZIP")
logWriter.WriteLine("6 MB ZIP File" & "," & (DateTime.Now - beginTime).TotalMilliseconds)
End Using
答案 0 :(得分:0)
有什么方法可以减少TCP层的确认窗口以减少发生的聊天情况?
在应用程序级别,您对通信的网络层中发生的事情没有太多控制权,这全部由较低级别的API处理。 .NET框架仅向您提供在这些API之上构建的某些类型,以简化实现过程。
也就是说,确认是使TCP可靠的原因,这些确认可以确保所有数据都已发送到连接的另一端。您可以切换为不使用确认的UDP,这意味着您永远无法验证数据是否已成功接收,这对于实时通信(在速度和质量之间取得平衡)而言非常有用,但对于发送文件而言则不然,因为我们希望文件能够完全传输,而不仅仅是整个文件的96%。验证我们是否已收到完整文件的唯一方法是让接收者通知我们它实际上已接收到数据包。
对我来说,这听起来像是与基础架构/网络架构有关的问题。因此,我个人不会尝试在应用程序级别上解决此问题。使用WebClient类以及TCP,感觉就像是适合您的用例的协议。因此,在我看来,您已经完成工作并正确实现了文件下载。
如果有可能,我会尝试在服务器和客户端之间放置一个内容交付网络(CDN),以便CDN可以卸载下载的内容并上传到与您的物理位置接近的边缘服务器。
如果这不可能,那么您将变得很有创造力,例如,在英国拥有第二台服务器,该服务器将其自身与美国服务器上的文件同步。出于时间/金钱的原因,我不会这样做,只是将延迟保持原样。 80ms对我来说可以接受。