FTP支持分页吗?

Does FTP support paging?

在一些测试中,我们的一个团队报告了尝试通过 FTP 访问目录时超时。原因是他们代码中的一个错误导致创建了数百万个小文件。

根据我的理解,超时的原因是请求要求列出目录的内容,并等待对所有文件的单一响应。

如果服务器在发现结果时立即开始 returning 结果(思考:yield returnreturn),这将避免超时。同样,如果 return 分页数据有一些选项,那可能会给我们一个解决方法。

因为 FTP 是 request-response,而不是 request-response-response-...,所以我认为 yield return 的情况是不可能的;但某种形式的寻呼可能是。也就是说,也许这不会提供解决方案,因为分页意味着某种形式的排序,这本身会随着文件数量的增加而产生开销。

注意:这是出于好奇而提出的问题;我们的真正问题已经解决,因为我只是清除目录 () 来解决问题。然而,我的想法是,如果有一个选项可以将提要结果返回,文件夹中的项目数量将不再是一个潜在的问题(只要我们不在结果 returned)。我们正在使用 FileZilla Server 和 .Net 客户端 (System.Net.FtpWebRequest);但由于这是理论上的,所以我对通用答案比对我们实施的具体答案更感兴趣。

FTP 没有任何明确的分页支持。 FTP 协议与您描述的问题无关。对于目录列表,将打开一个新的 TCP 连接,并且假定该连接上从第一个字节到最后一个字节的所有内容都是目录列表。

因此 - 服务器可以随意流回目录列表 however/whenever,客户端可以随意显示它接收到的数据 however/whenever。服务器可以随时发回一些目录列表,稍等一下,再发送一些条目,等等,客户端可以自由地在目录列表到达时显示它,或者在整个过程结束时立即显示它。收到回复。

但请注意,FTP 服务器通常会受到 OS API 的约束以列出文件。根据 OS、文件系统等,API 调用列出目录中的文件可能会阻塞并需要很长时间才能处理包含许多小文件的目录,基本上 return 所有列表一次返回到 FTP 服务器。