일부 테스트 중에 한 팀에서 FTP를 통해 디렉토리에 액세스하려고 시도하는 시간 초과를보고했습니다. 그 원인은 수백만 개의 작은 파일을 생성하게 만든 코드의 버그였습니다.FTP가 페이징을 지원합니까?
시간 초과 이유는 요청에 디렉터리의 내용이 표시되도록 요청하고 모든 파일에 대해 단일 응답을 기다리는 것입니다.
대신 서버가 즉시 결과를 반환하기 시작하면 (생각하면 : yield return
대 return
) 이는 시간 초과를 막을 수 있습니다. 마찬가지로 페이징 된 데이터를 반환 할 수있는 옵션이 있다면 해결 방법이 될 수 있습니다.
FTP가 request-response
이므로 request-response-response-...
이 아니기 때문에 yield return
시나리오는 불가능합니다. 그러나 페이징의 어떤 형태가있을 수 있습니다. 즉, 페이징은 일종의 정렬을 암시하기 때문에 해결책이되지 않을 것입니다. 그 자체로 파일 수에 따른 오버 헤드 조정이 발생합니다.
NB : 이것은 호기심에 관한 질문입니다. 이 문제를 해결하기 위해 단순히 디렉토리 (https://stackoverflow.com/a/6208144/361842)를 제거하기 만하면 실제 문제가 해결됩니다. 그러나 피드 결과를 다시 떨어 뜨릴 수있는 옵션이 있다면 폴더에있는 항목 수가 잠재적 인 문제가되지 않을 것입니다 (결과가 정렬되기 전/필터링되지 않은 한 반환됩니다).). 우리는 FileZilla Server
과 .Net 클라이언트 (System.Net.FtpWebRequest
)를 사용하고 있습니다. 그러나 이것은 이론적 인 것이므로 우리의 구현과 관련된 것보다 일반적인 대답에 더 관심이 있습니다.