【问题标题】:Efficient file transfer from Java server to multiple C++ clients?从 Java 服务器到多个 C++ 客户端的高效文件传输?
【发布时间】:2010-12-11 12:16:09
【问题描述】:

我需要通过 Internet 将文件从 Java 服务器快速传输到 C++ 客户端,而许多客户端通常需要相同的文件。我在看 Java 中的 transferTo() ,这听起来像是一个经过适当优化的函数来发送文件。但是,我不确定何时使用 transferTo() 如何在 C++ 中最好地接收它(即它只是原始数据传输,我如何确定文件何时在客户端结束,等等)。我需要它才能在 Windows 和 Linux 上工作。此外,除了 transferTo() 之外,还有什么方法可以提高效率,尤其是利用许多客户端通常需要相同文件这一事实?我不知道怎么说多播等。另外,我使用的是应用程序级安全性而不是 VPN,并且在 Java 服务器上,使用 AES 加密并使用 MAC 数字签名,所以我也在寻找一个跨平台库推荐,以最小的痛苦处理 C++ 端的加密。 我非常精通 C++,但以前没有网络编程经验,所以请考虑比任何建议。 谢谢。

【问题讨论】:

  • 请定义在这种情况下什么对你来说是有效的。

标签: java c++ nio file-transfer


【解决方案1】:

嵌入式网络服务器? http-transfers 对你来说足够高效吗?

我记得见过的最简单的可嵌入 Java 网络服务器是 http://acme.com/java/software/Acme.Serve.Serve.html。我们在生产中使用嵌入式 Jetty 6,但这需要更多的麻烦。

如果您的客户一开始不知道在哪里可以找到您的网络服务器,请考虑使用 Zeroconf。 http://jmdns.sourceforge.net/

【讨论】:

  • 服务器具有静态 IP,因此发现没有问题。而且我在考虑更多的套接字级别而不是使用 http,因为我试图使事情尽可能精简,而且我不确定 http 是否可以很好地与应用程序级加密一起使用。
【解决方案2】:

出于可扩展性的原因,Thorbjørns 建议使用 http 似乎是一个非常好的主意,因为它可以让您轻松设置用于缓存的 http 代理、使用标准负载平衡工具等等。

如果您希望传输的不仅仅是一团数据,您可能需要查看 googles 协议缓冲区。它们允许在 java 和 c++ 端进行非常简单快速的编码/解码。

【讨论】:

    【解决方案3】:

    考虑将文件分块并通过 UDP 数据报发送。 C++ 可以在收到它时重新编译。您是否考虑过实施/嵌入现有的 P2P 协议实施?

    【讨论】:

    • P2P 看起来太复杂了,而且客户端的上传速度通常都很慢。
    【解决方案4】:

    如果您需要高效传输到多个客户端,那么您的瓶颈就是服务器。

    为此,请查看 bit-torrent 协议,因为它在客户端之间分配传输。

    【讨论】:

    • 5兆上传就足够了,如果我能得到很高的利用率。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2016-05-16
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多