FTP支持分页吗?

时间:2017-12-21 12:55:21

标签: ftp paging filezilla ftps yield-return

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

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

如果服务器立即开始返回找到的结果(想想:yield return vs return),这将避免超时。同样,如果有一些选项可以返回分页数据,这可能会给我们一个解决方法。

由于FTP是request-response,而不是request-response-response-...,我想象yield return场景是不可能的;但某种形式的传呼可能是。也就是说,也许这不会给出解决方案,因为分页意味着某种形式的排序,这本身会导致文件数量的开销缩放。

注意:这是好奇心的问题;我的真正问题已解决,因为我只是清除目录(https://stackoverflow.com/a/6208144/361842)来解决问题。但是,我的想法是,如果有一个选项可以将输入结果反馈回去,那么文件夹中的项目数将不再是一个潜在的问题(只要我们不在他们之前排序/过滤/等结果&# 39;重新回来)。我们正在使用FileZilla Server和.Net客户端(System.Net.FtpWebRequest);但由于这是理论上的,我对通用答案的兴趣超过了我们实施的具体答案。

1 个答案:

答案 0 :(得分:2)

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

所以 - 服务器可以自由地流回目录列表,无论何时它都可以,并且客户端可以随时随地显示它收到的数据。服务器可以随时发送一些目录列表,等待一下,发送更多条目等,客户端可以在它到达时自由显示目录列表,或者在整个目录列表中显示全部目录列表。收到回复。

但请注意,FTP服务器通常会被OS API绑定到列表文件。根据操作系统,API调用目录中的列表文件的文件系统等可能会阻塞并花费很长时间来处理包含许多小文件的目录,并且基本上将所有列表一次性返回到FTP服务器。 / p>