2013-05-19 2 views
1

매우 기괴한 문제로 인해 방향을 찾고 있습니다.지연된 서버 응답이있는 경우 Fineuploader가 업로드를 다시 시작합니다.

컨텍스트 : WordPress에 큰 파일 (최대 100MB)을 업로드합니다. 프로세스의 일환으로 서버 쪽에서 실행되는 긴 작업 (청크를 사용하여 API를 통해 DropBox로 파일을 푸시)이 수행되므로 대용량 파일의 경우 응답이 필연적으로 지연됩니다. 이 부분은 PHP의 sleep() 함수를 실행하여 쉽게 시뮬레이션 할 수 있습니다.

문제 : Fineuploader 100 %로, 다음 처음부터 업로드를 다시 시작 진행 (서버가 계속이 시점에서 처리 완료되지 않음) 약 15 초 동안 waitingForResponse 메시지를 표시 가져옵니다. 두 번째 시도 후 그것은 서버로부터 아무것도받지 못했다고 주장하고 업로드가 실패한 것으로 표시합니다. 콘솔 디버그 메시지 :

[FineUploader] xhr - server response received for 0 
XMLHttpRequest { readyState=4, timeout=0, withCredentials=false, more...} 
[FineUploader] responseText = 

서버 로그 요청을 보여주고 서버가 두 번 성공 JSON 메아리; 결국에는 서버에 두 개의 파일이 있습니다.

질문 :이 문제를 해결하려면 어떻게해야합니까? 타임 아웃이 없도록하기 위해 정기적으로 FineUploader에 반환 할 수 있습니까?

답변

1

고급 업 로더에는 시간 초과 메커니즘이 없습니다. 시간 초과가 발생하면 브라우저 자체에서 시간 초과가 발생하거나 시간이 초과 된 브라우저와 서버 사이에 일부 어플라이언스가 있습니다.

AWS (Amazon Web Services)를 사용할 때 이전에이 문제가 발생했습니다. 귀하의 상황과 마찬가지로 응답을 반환하기 전에 전체 파일을받은 후에 서버 측 처리를 수행해야했습니다. 이 과정에서 물론 TCP 트래픽이 발생하지 않았습니다. ELB (Elastic Load Balancer)의 TCP 유휴 시간 제한은 1 분입니다. 큰 파일에 대한 처리가이 값을 초과하여 ELB가 요청을 종료합니다.

요청/업로드를 완료 할 때만 상세 업 로더에게 응답을 보낼 수 있습니다. 서버 측 처리가 완료 될 때까지 파인 업 로더에 "성공"응답을 반환하기를 정말로 기다리고 싶다면 요청을 종료하는 대상을 파악해야합니다. 옵션에 따라 요청을 종료하는 장치의 시간 초과 기간이 길어 지거나 단순히 별도의 스레드 서버 측에 처리를 위임하고 모든 파일 바이트를 수신하자마자 성공 응답을 반환 할 수 있습니다 주문.

+0

감사합니다. AWS로 문제를 해결 한 적이 있습니까? – montrealist

+0

예. AWS의 경우 ELB의 TCP 유휴 시간 제한을 늘릴 수 있습니다. 이는 직접 수정할 수있는 것이 아니므로 AWS 관리자에게 요청해야합니다. 나는이 요청을 처리하는 데 직접적으로 관여하지는 않았다. (내 팀원 중 다른 사람이 임무를 부여 받았다.)하지만 우리는 증가를 요청했고 그것이 부여되었다고 생각한다. 증가를 요청하기 전에 우리는 단순히 처리를 별도의 스레드에 위임하고 응답을 최대한 빨리 반환하는 방법에 대해 논의했습니다. 메모리가 올바르게 작동하면 처리가 인라인으로 이루어져야합니다. –

+0

알겠습니다. 업로드가 다시 시작되는 이유는 무엇입니까? 의도 한 기능입니까? – montrealist

관련 문제