[英]Large amount of data - what is the best way to send them?
我们有这种情况:
包含这些数据所需的所需数据和客户端组件的服务器。
在服务器上存储了两种类型的数据: - 一些信息 - 基本上只是几个字符串 - 二进制数据
我们在获取二进制数据时遇到问题。 双方都是用Java 5编写的,所以我们有两种方式....
由于速度,内存等原因,Web Service不是最佳解决方案......
那么,你更喜欢什么?
如果可能,我想错过低级插座连接...
提前致谢
维特克
我认为执行大量数据的唯一方法是使用原始套接字访问。
您将使用大多数其他方法在大文件上遇到Out of Memory问题。
套接字处理在Java中非常简单,它可以让您在不将整个文件加载到内存中的情况下流式传输数据(这是在没有自己缓冲的情况下在幕后发生的事情)。
使用这种策略,我设法建立了一个系统,允许传输任意大的文件(我使用7+ GB DVD映像来测试系统),而不会遇到内存问题。
查看W3C标准MTOM,将二进制数据作为SOAP服务的一部分进行传输。 它是高效的,因为它作为二进制发送,也可以作为缓冲块发送。 它还将与其他客户或提供商互操作:
你可能想看一下protobuf ,这是google用来交换数据的库。 它非常有效和可扩展。 在旁注中,永远不要低估装满1TB硬盘的旅行车的带宽!
我已经尝试将二进制数据转换为Base64,然后通过SOAP调用发送它,它对我有用。 我不知道这是否算作一个Web服务,但如果确实如此,那么你几乎都会遇到套接字问题。
一些选择:
您可以使用RMI来隐藏套接字级别的东西,也许gzip数据......但如果连接失败,它将不会为您恢复。 可能也会遇到内存问题。
只使用二进制mime类型HTTP数据(也可能在Web服务器上配置gzip)。 简历上的类似问题。
产生类似wget的东西(我想这可以做简历)
如果客户端已经拥有数据(其先前版本),则rsync将仅复制更改
旧的,经济实惠且强大的FTP怎么样? 例如,您可以轻松地在服务器端组件中嵌入FTP服务器,然后编写FTP客户端代码。 FTP就是为此而生的(文件传输协议,不是吗?),而带有附件的SOAP并没有考虑到那些东西而设计得非常糟糕。 例如,您可以查看:
http://mina.apache.org/ftpserver/
但是还有其他实现,Apache Mina是我能记得的第一个。
祝你好运和问候
sneakernet是一个选择吗? :P
RMI以其易用性和内存泄漏而闻名。 被警告。 根据我们谈论的数据量,sneakernet和套接字都是不错的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.