【问题标题】:What (standard) protocols offer piecemeal access to streams?哪些(标准)协议提供对流的零碎访问?
【发布时间】:2013-02-27 20:22:15
【问题描述】:

我有一个应用程序,我需要以零碎的方式远程访问大文件。我会知道起始偏移量,但是 - 从该位置开始读取文件的某些前缀后,我将建立另一个新的偏移量,并且希望从这个新位置读取下一个 - 至关重要的是 - 遭受了最小可能的延迟。

我考虑过使用 HTTP - 发布一个详细说明开始传输的偏移量的请求 - 但我不想指定传输大小(大小太小会导致吞吐量低;大小太大会导致不可接受的延迟。)或断开打开的连接 - 因为这会在重新连接时产生延迟损失。

我曾考虑过使用 TCP/UDP 和套接字“自己动手” - 但感觉好像这种方法涉及重新发明轮子。 UDP 可能承诺最低延迟,但我无法用可靠性换取更低延迟。

我非常有兴趣指出任何关于协议的标准(提案、RFC 等)来处理这种数据访问模式。也许已经在云存储的背景下开发了一种很好的方法?

【问题讨论】:

  • 在网上搜索“udp 可靠数据传输”,你会发现一些有趣的点比如UDT。
  • @Ron Klein:我知道有多种方法可以使 UDP 变得可靠——而且在某些情况下,它的性能会优于 TCP。然而,我的预感是,基于 TCP 而不是 UDP 的协议将最适合我的需求......因为,虽然我有时会跳转到文件中的新位置,但这样做之后,我将从该偏移量进行流式传输。 UDT 之类的似乎并不理想,因为我真的想采用更高级别的协议 - 支持流式传输和重新定位的协议......而不是其他。

标签: web-services rest web-applications streaming protocols


【解决方案1】:

我相信您想要的是 FTP 协议的变体(RFC 959:https://www.rfc-editor.org/rfc/rfc959)。我认为没有任何既定的协议标准可以明确地说明您想要做什么,但是 FTP 非常接近。它使用两个连接,一个“控制连接”和一个“数据连接”。控制连接处理从客户端到服务器的命令传递并返回状态消息,数据连接单独用于传输数据。听起来这是您需要设置的系统。

您想要做的不同的主要事情是能够从文件中的任意偏移量中寻找和传输数据,这可以通过自定义命令轻松完成。根据您的设置,您可能能够获取 FTP 客户端和服务器的现有开源实现,并只需添加您的自定义命令。

【讨论】:

  • 您已经掌握了我希望此协议实现的目标......仍然让我感到惊讶的是,我找不到直接解决此问题的“标准”。我不认为修改 FTP 是正确的策略……修改后的协议将无法与 FTP 互操作。采用主动模式 FTP(有 2 个连接)不必要地引入了防火墙配置的麻烦。应该可以向一个方向发送命令 - 并通过单个 TCP 连接在另一个方向接收数据......尽管终止流需要对流数据采用某种阻塞结构。
猜你喜欢
  • 2021-03-16
  • 2021-01-31
  • 1970-01-01
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 1970-01-01
  • 2017-12-30
相关资源
最近更新 更多