我需要通过 Internet 将大型二进制(2Gb-10Gb)数据从一台 pc(客户端)发送到另一台 pc(服务器)。首先,我尝试使用 IIS 中托管的 WCF 服务,使用具有消息安全性的 wsHttpBinding 绑定,但它花了很多时间(几天),这对我来说是不合适的。现在我考虑使用套接字编写客户端和服务器应用程序。会更快吗?
最好的方法是什么?
谢谢
我需要通过 Internet 将大型二进制(2Gb-10Gb)数据从一台 pc(客户端)发送到另一台 pc(服务器)。首先,我尝试使用 IIS 中托管的 WCF 服务,使用具有消息安全性的 wsHttpBinding 绑定,但它花了很多时间(几天),这对我来说是不合适的。现在我考虑使用套接字编写客户端和服务器应用程序。会更快吗?
最好的方法是什么?
谢谢
对我来说,普通的旧 FTP 在这种情况下是合适的。通过使用它,您将有机会恢复中断的传输,而无需从头开始重做工作。您需要考虑到由于某些原因导致如此大量的下载被中断的可能性。
发送大量数据时,您会受到连接带宽的限制。您应该注意连接中的中断。如果您必须重新发送大量数据,那么小的中断可能会产生很大的影响。
您可以使用BITS,这会在后台传输数据,并将数据分成块。所以它会为你处理很多事情。
它依赖于 IIS(在服务器上),并且有一个客户端 (API) 来传输数据。因此,您无需读取或写入数据传输数据的基础知识。
我不知道它是否会更快,但至少比发出单个 HTTP 或 FTP 请求要可靠得多。你可以让它运行得非常快。
如果带宽有问题,并且不必通过 Internet 发送,您可以检查高带宽/低延迟连接,例如通过快递发送 DVD。
您可以使用 .Net 中的 BITS,在CodeProject 上有 wrapper。
好吧,带宽是你的问题,在套接字中再低一点也对你没有多大帮助,因为 WCF 开销对长二进制响应没有太大影响。也许您的选择是使用一些无损流压缩算法?前提是您的数据是可压缩的(使用 zip 进行空运行,如果它压缩本地磁盘上的文件,您可以找到合适的流算法)。顺便说一句,我建议提供简历支持:)
通常,利用已经为此类事物编写的内容是最合适的。例如 FTP、SCP、rsync 等
如果下载中断,FTP 支持恢复,但不确定它是否支持恢复上传。Rsync 在这种事情上要好得多。
编辑:可能值得考虑一些我不太熟悉但可能是另一种选择 - bit-torrent?
另一个选择是使用诸如 UDT 之类的协议库来滚动您自己的客户端/服务器,这将为您提供比 TCP 更好的性能。见: http ://udt.sourceforge.net/
尽管有一些与更高级别的框架相关的带宽开销,但我发现 WCF 文件作为流传输已经足够快了。通常与 SMB 上的常规文件传输一样快。我在一个会话中传输了数十万个小文件,其中包括 6-10gb 有时更大的大文件。从来没有在任何体面的连接上遇到过任何重大问题。
我真的很喜欢它提供的接口。允许你做一些 FTP 不能做的很酷的事情,比如远程处理或双工端点。您可以对双方连接的各个方面进行编程控制,并且它们可以与文件一起传递消息。好玩的东西。
是的,如果您不需要所有这些东西,FTP 既快速又简单。