2010-08-25 92 views
1

将大量数据从一台计算机传输到另一台计算机的可能选项不在同一局域网中。数据量大约是100Mb解压缩和2Mb压缩?另一个要求是,当我为此创建一个服务器时(使用C#),Java客户端应该能够使用它。如何在两台计算机之间传递大量数据

  • WCF是否支持这样的事情?但是如果Java客户端无法使用它,我不感兴趣。
  • 这里有什么其他策略?
+0

互联网管道应该做的工作 – 2010-08-25 08:03:34

回答

2

我只是使用一些常见的HTTP或FTP,因为会有很多现有的库来做到这一点,你几乎保证没有兼容性问题。对于这些协议,2MB并不是不合理的大量数据。

+0

HTTP是否支持gziped请求? – 2010-08-25 07:52:50

+0

当然,您可以在将数据包含在请求正文中之前对它们进行gzip压缩。 (但我不认为你可以在请求中使用Content-Encoding标头。) – 2010-08-25 16:52:02

0

在C#中,您可以将对象序列化为XML并传输,另一方面,您可以将XML反序列化为对象。

就文件大小而言,您可以传输为压缩或7z ..并在解析xml之前在客户端解压缩。

0

WCF支持SOAP并包含用于XHTTP的可选JSON序列化。还有其他机制,但他们是以MS为导向的。您将可以轻松地使用您创建的服务。但是,您将不得不考虑如何对数据进行编码,因为它会以非二进制数据友好的方式(XML/JSON)触及导线。

您可能希望改为创建一个简单的http处理程序,它可以使用适当的MIME头文件等直接以zip形式返回数据。您应该可以使用Java客户端直接打开该数据库。

0

XMPP是另一种选择。您需要另一台服务器,但这可能是一个优点:客户端不需要知道服务器IP地址,服务器和客户端只需连接到XMPP服务器即可交换消息和文件。

相关链接(用于Java):

0

你没有提到你想送什么类型的数据。所以为了保持简单,我会假设你有可以转换为字节数组的数据流。流的内容必须采用C#和Java都可以理解的格式!

最好的选择是用GZip流压缩你的数据流。 Java应该支持Gzip。比你可以发送流转换为字节数组作为您的WCF服务操作的响应。您可以使用默认的文本编码将字节数组转换为Base64编码的字符串。如果您的Java客户端支持MTOM(它是Java支持的标准),那么您可以使用使用较小消息的MTOM编码。

如果您没有具有众所周知的内容格式的流,则可以使用某种自定义数据。对于自定义数据,您必须使用XML的可互操作传输格式。使用XML将进一步增加数据的大小。在这种情况下,您应该考虑将您的数据传输分成几个呼叫。您还可以尝试在IIS 7.x中承载您的WCF服务,并利用其内置功能 - 动态内容压缩。如果您的Java客户端使用HTTP Accept-Encoding标头设置为compress进行调用,则gzip会自动压缩响应。请注意,只有.NET 4.0 WCF客户端才能使用此类服务​​。

1

这是一个有趣的问题。这个问题很容易回答。但有趣的是,这类问题是新的,它们之前并不存在。让我解释一下,但首先我会回答你的问题:

你应该使用旧时尚TCP流创建服务器和客户端。为了不占用带宽,你需要以某种方式压缩流,这里使用你能找到的最常见的压缩算法之一(任何人都说Zip?)。现在你有一个独立于语言的协议。任何语言的客户都会工作,完成任务。另外为了保持它的跨平台,不要选择最好的压缩方式,选择最常见的压缩方法(这将足够好)。

现在为什么这类问题很有趣,他们展示了一些关于面向对象的大规模问题。人们理解和使用巨大的框架,并询问这个或那个框架是否可以为他们执行这个或那个简单的任务。在这里,我们失去了根基,我们失去了事物的内在运作,它不是用锤子而是用核导弹击中钉子。它超出了目标,并且会产生巨大的应用程序,占用空间大,性能往往不佳。

我相信这个问题在OOP被完全采用后有所增加。这就像新程序员只想学习这些新的大框架,并且框架模糊了世界的观点。大框架绝对没有错,它们很棒,但我认为在掌握基本知识之前开始使用它们是错误的。这就像学习使用NASA航天飞机而不是学校版的塞斯纳私人飞机。

相关问题