2013-03-22 1 views
5

APE's mod_xsendfile does not work with CF9's jrun_iis6_wildcard.dll 이래로 저는 <cfcontent>을 사용하여 안전하게 파일을 제공합니다. 문제는 파일 다운로드가 많거나 연결 속도가 느린 경우 오랜 시간 동안 CF 요청을 묶어 버리는 것입니다. 엄격한 제한을 적용 할 방법이 없으면 이론적으로 모든 요청이 파일 제공과 관련되어있는 CF 서버를 중단시킬 수 있습니다.cfcontent 서비스 파일에 연결된 요청 수를 추적하는 방법은 무엇입니까?

<cfcontent file=""> 아래에서 추가 로깅/로직을 시도했지만 결코 도달하지 못하고 실행 된 것으로 나타났습니다.

cfcontent 요청을 너무 많이 처리하여 CF가 다운되지 않도록하려면 어떻게해야합니까?

업데이트 : 좋은 소식! CF10 works with APE's mod_xsendfile!

+2

많은 사이트에서 사용하는 유일한 대안은 파일을 보안 된 requestid에 복사하여 IIS가 제공하고 주기적으로 또는 사용자의 "세션"이 끝날 때 정리하는 것입니다. – BKK

+0

@BenKoshy 흠, 세션이 끝나도 다운로드가 끝났음을 의미하지는 않습니다. 아직 다운로드중인 경우 어떻게 될지 궁금합니다. – Henry

+0

@Henry, 방금 막연하게 반복적으로 반복적으로 비슷한 실험을했는데, 속도가 느린 보고서 (분)와 cfcontent가 있습니다. 사용자가 보고서를 시작하고 집으로 돌아가서 다음날 Excel 파일을 열면 어떤 결과가 발생할지 알기위한 것이 었습니다. 이 경우 세션이 시간 초과 되었더라도 파일을 사용할 수 있습니다. –

답변

0

해결 방법 1

당신 때문에 당신이 할 수있는 제어 할 수없는 요인 (수 스레드 "붙어", 서비스/서버 종료 등)에 100 % 진정한 회계를 가질 가능성은 거의있을거야 고려 다음 :

총 요청 만 추적하려는 경우 파일 제공을 시작할 때 증가하는 응용 프로그램 변수를 사용할 수 있습니다. 그런 다음 내용이 끝나면 카운트를 감소시킵니다. 그러나 cflock을 사용하여이 업데이트로 인해 문제가 발생하지 않도록주의해야합니다.

파일에이 로그를 기록하려면 동일한 작업을 수행 할 수 있지만 파일을 동시에 읽거나 쓰는 요청과 관련하여 문제가 발생하지 않도록 cflock으로 래핑하십시오.

당신이 파일을 나타내는 테이블을 만들 수 SQL을 사용하는 경우 각 기록하고 적절한 정보를

  • 파일 이름 예 조금으로 완료
  • 을 추가 가져 오기 위해/더 필드는 false로 기본값 없습니다
  • 사용자/클라이언트 정보는
  • 시작 날짜/시간은 지금,
  • 종료 날짜/시간 기본,
  • 상태를 "null로하는 기본값 성공 "과에 완료 예"정확한 날짜/시간 및 상태에 지정된 ID와 함께 테이블에 대한 업데이트를 수행 할 때 반환 된 신원 다음 파일을 cfcontent를하고 사용
  • 다른 정보

"를 다운로드 .

오류가 발생하는 동안 "오류 [관련 오류 세부 정보]"상태를 반영하도록 테이블을 업데이트하고 1로 완료 할 수 있습니다. 완료된 업데이트를 추가하여 완료 = 1로 변경하거나 제거하려면 나쁜 생각이 아닙니다. (아마도 응용 프로그램 onstartup 중 또는 일정 기간 후)

이 (그리고 그들이 무엇인지 등)

그러나 당신이 총 현재 보류중인 요청이 테이블을 쿼리 할 수 ​​있습니다 사용할 수 없습니다 기록, 그 장기 실행 요청 문제 만 해결합니다.2

솔루션은 이상적으로 문제는 안전하게 파일 내용을 반환하는 것입니다. 파일이 얼마나 민감한 지 (예 : 개인이 선호하지만 세계의 끝이 아닌 경우) 적절한 웹 액세스 가능 디렉토리로 복사하지만 이름에 UUID를 사용할 수 있습니다. 그럼 Secret1.pdf라고 가정 해 보겠습니다. cfdirectory를 사용하여 파일을 복사 한 디렉토리를 만듭니다. 다음과 같은 것을 제공합니다 :

/files/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxx/Small1. pdf 그런 다음 해당 디렉토리로 리디렉션합니다.

그런 다음 예약 된 작업이나 게이트웨이 또는 설정된 시간보다 오래된 디렉터리를 삭제하는 방법을 설정할 수 있습니다. 예 : 예를 들어 xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx 디렉토리를 삭제하려면 지금부터 30 분이 지나야합니다.

+0

"그런 다음 내용이 끝나면 cfcontent가 끝날 때들을 수있는 방법이 없으므로 카운트를 감소시킵니다. – Henry

+0

좋은 지적. 그러면 아마도 Solution 2가 도움이 될 것입니다. –