2017-05-23 4 views
0

.CSV 파일을 받아서 저장하고 스캔하고 데이터를 into DB 개의 데이터로 끝내고 파일을 삭제해야하는 앱을 개발 중입니다.오류 504, 일부 데이터가 서버에서 클라이언트로 전달되는 것을 방지하려면?

약 10000 개의 파일이있는 파일에는 문제가 없지만 큰 파일의 경우 PHP script is correctly runned and all data are saved into DB이 인쇄되지만 ERROR 504 The server didn't respond in time.이 인쇄됩니다.

나는 .CSV file with the php function fgetcsv();을 검사 중입니다.

이미 php.ini 파일 (max execution time (120) 등)로 설정을 수정했지만 변경 사항이 없으며 1 분 후에 오류가 표시됩니다.

나는 또한 자바 스크립트 함수를 사용하여 10 초마다 경고를 표시하려고했지만이 경우에도 오류가 표시됩니다.

이 문제를 방지하려면 해결책이 있습니까? 오류를 피하기 위해 서버에서 클라이언트로 일부 데이터를 전달할 수 있습니까?

감사의

+0

504는 타임 아웃입니다. 서버 설정에서 허용되는 실행 시간을 연장해야합니다. 그러나 연결을 길게 열어 두는 것은 여러 가지 이유로 정말 나쁜 생각입니다. 대신 사용자가 파일을 업로드하도록 한 다음 백그라운드 프로세스 (즉, PHP/Apache를 사용하는 경우 CRON)에서 처리하도록 제안하십시오. 처리가 완료되면 UI/이메일/SMS 등을 통해 사용자에게 알릴 수 있습니다. –

답변

0

그것의 일반적 시스템 아키텍처를 진화 시작해야 할 때 확장 문제가 팝업, 그리고 응용 프로그램이 비동기 적으로 작동해야합니다 때. 당신이 가지고있는이 문제는 매우 일반적입니다. (저의 팀원 중 일부는 글을 쓸 때 그렇습니다.)하지만 모두는 결국 그것을 다루어야합니다.

해결 방법 1 : 크론 작업은

가장 일반적인 솔루션은 주기적으로 새로운 작업을 수행 할 수있는 큐를 검사 cron 작업을 만드는 것입니다. 나는 모든 사람이 자기 자신을 가지고 있기 때문에 대기열의 본질을 설명하지 않을 것이고, 어떤 것은 괜찮은 것이고 다른 것들은 정말로 나쁘다. 그러나 일반적으로 관련 정보와 작업 상태 (나쁜 해결책 중 하나)를 가진 DB 테이블을 포함한다. 또는 Memcached와 관련된 솔루션 인 MongoDB도 꽤 유명합니다.

이 솔루션의 "문제"는 궁극적으로 다시 "스케일링"입니다. Cron 작업은 일정 간격으로 주기적으로 실행되므로 작업에 특히 긴 시간이 걸리면 작업이 겹칠 수 있습니다. 즉, 일종의 잠금 작업을하거나 작업을 순차적으로 실행하는 것을 지원하는 스케줄러를 사용해야합니다.

결국에는 시간 초과 문제가 발생하지 않으며, 일반적으로 전체 컴퓨터가 이러한 작업을 실행하도록 할 수 있으므로 메모리도 문제가되지 않습니다.

해결 방법 2 : 근무 위임

나는이 솔루션에 대한 예로서 Gearman을을 사용 하겠지만, 다른 도구는 RabbitMQ 같은 AMQP 같은 표준을 포함한다. 필자는 Gearman을 선호하는데 설치가 간단하고 메시징에 대한 업무 처리를 위해 설계되었습니다.

이러한 종류의 위임은 전화를 건 직후 실행되는 이점이 있습니다. 서버는 기본적으로 (Apache 서버와 달리) 물건을 기다리고 있습니다. 요청을 받으면 클라이언트의 작업 부하를 "작업자"중 하나로 옮깁니다. 작성한 스크립트는 무한히 실행됩니다. 워크로드 용 서버.

같은 수의 작업자를 원하는만큼 가질 수 있으며 각각은 같은 유형 또는 다른 유형의 작업을 실행합니다. 이것은 스케일링이 당신이 가지고있는 노동자의 수에 의해 결정된다는 것을 의미합니다. 이것은 수평으로 매우 깨끗하게 확장됩니다.

결론 :

크론은 자동화 된 유지 보수의 내 의견으로는 잘하지만 그들은 노동자들에게 이상적인 선택을 실행하게하는 동시에 작업 할 때 문제로 실행합니다.

어느 쪽이든 사용자가 요청에 대한 피드백을받는 방식을 변경해야합니다. 그들은 요청이 처리 중임을 통보 받아 나중에 결과를 얻기 위해 점검해야하며 실행중인 작업의 상태를 주기적으로 추적하여 ajax를 통해 사용자에게 실시간 피드백을 제공 할 수 있습니다. 작업을 수행하는 동안 작업 상태를 유지할 필요가 있으므로 cron 작업은 조금 까다 롭습니다. 그러나 Gearman은이를 수행하기위한 훌륭한 기본 제공 솔루션을 제공합니다.

http://php.net/manual/en/book.gearman.php

+0

크론 작업으로 해결했습니다 ... Thnk 's – Edoardo