4

我们有这种情况:

包含所需数据的服务器和这些数据所需的客户端组件。

服务器上存储了 2 种类型的数据: - 一些信息 - 基本上只有几个字符串 - 二进制数据

我们在获取二进制数据时遇到了问题。双方都是用 Java 5 编写的,所以我们有几种方法......

由于速度、内存等原因,Web 服务不是最佳解决方案......

那么,你更喜欢什么?

如果可能的话,我想错过低级套接字连接......

提前致谢

维泰克

4

8 回答 8

5

我认为处理大量数据的唯一方法是使用原始套接字访问。

您将使用大多数其他方法在大文件上遇到内存不足问题。

套接字处理在 Java 中非常简单,它可以让您流式传输数据而无需将整个文件加载到内存中(这是在没有您自己的缓冲的情况下在幕后发生的事情)。

使用这种策略,我设法构建了一个允许传输任意大文件的系统(我使用 7 GB 以上的 DVD 映像来测试系统),而不会遇到内存问题。

于 2009-01-02T01:52:29.587 回答
5

查看 W3C 标准 MTOM 以将二进制数据作为 SOAP 服务的一部分进行传输。它是高效的,因为它作为二进制发送,也可以作为缓冲块发送。它还将与其他客户端或提供者互操作:

如何进行 MTOM 互操作

服务器端 - 使用 SOAP 发送附件

于 2009-01-02T03:34:48.927 回答
2

你可能想看看protobuf,这是 google 用来交换数据的库。它非常高效且可扩展。在旁注中,永远不要低估装满 1TB 硬盘的旅行车的带宽!

于 2009-01-02T01:33:36.707 回答
1

我尝试将二进制数据转换为 Base64,然后通过 SOAP 调用发送它,它对我有用。我不知道这是否算作一项 Web 服务,但如果是的话,那么您几乎就被套接字困住了。

于 2009-01-02T01:26:08.453 回答
1

一些选项:

  • 您可以使用 RMI,它会为您隐藏套接字级别的东西,也许 gzip 数据......但如果连接失败,它将不会为您恢复。可能也会遇到内存问题。

  • 只需 HTTP 二进制 mime 类型的数据(同样可能在网络服务器上配置 gzip)。简历上的类似问题。

  • 产生类似 wget 的东西(我认为这可以恢复)

  • 如果客户端已经有数据(它的以前版本),rsync 将只复制更改

于 2009-01-02T01:39:25.760 回答
0

旧的、负担得起的和强大的 FTP 怎么样?例如,您可以轻松地将 FTP 服务器嵌入到服务器端组件中,然后编写 FTP 客户端。FTP 正是为此而生的(文件传输协议,不是吗?),而带有附件的 SOAP 在设计时并没有考虑到这些东西,而且性能很差。例如,您可以查看:

http://mina.apache.org/ftpserver/

但是还有其他实现,Apache Mina 只是我记得的第一个。

祝你好运和问候

于 2009-01-02T01:49:45.380 回答
0

运动鞋网是一种选择吗?:P

RMI 以其易用性和内存泄漏而闻名。被警告。根据我们谈论的数据量,sneakernet 和套接字都是不错的选择。

于 2009-01-02T01:55:20.813 回答
0

将GridFTP视为您的传输层。另请参阅此问题

于 2009-01-02T02:27:31.327 回答