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