2010-06-02 2 views
4

나는 ajax를 통해 시작된 PHP 스크립트를 가지고있다. 이 PHP 스크립트는 exec()를 사용하여 쉘을 통해 별도의 PHP 스크립트를 실행합니다.Ajax/PHP - 장기 실행 스크립트 또는 폴링을 하나만 사용해야합니까?

exec()를 통해 호출 된 스크립트를 완료하는 데 30 초 정도 걸릴 수 있습니다. UI가 끝나면 업데이트해야합니다.

어떤 옵션이 선호됩니까?

a) HTTP 연결을 30 초 동안 열어두고 끝날 때까지 기다리십시오.
b) exec() 백그라운드에서 PHP 스크립트를 실행 한 다음 ajax 폴링을 사용하여 완료를 확인합니다 (5 초마다).
c) 내가 생각하지 못했던 다른 것.

감사합니다. Brian

답변

2

업데이트를 몇 초마다 폴링합니다. 오랫동안 연결을 열어두면 서버 나 브라우저 (HTTP 요청이 너무 오래 걸리면 브라우저가 시간 초과 됨)에 의해 연결이 끊어 질 가능성이 항상 있습니다.

+0

PHP의 set_time_limit() 함수와 Apache의 KeepAliveTimeout 설정을 사용하여이 문제를 해결할 수 있습니까? – Brian

+2

게시 할 수있는 문제에 대해서는 좋은 옵션이 아닙니다. 내가 준 솔루션이 최선의 선택입니다. 그곳에 갔었 어. –

1

옵션 b) 나에게 너무 진솔한 느낌. 서버 에 30 초가 지나면 요청을 수신하려면이 필요합니까? 그렇지 않으면 나쁜 상태가됩니까? (예 : 자원이나 그와 비슷한 것을 포기하지 않는 경우) 그렇다면 확실히 methinks와 함께 가십시오.

c)와 마찬가지로 AJAX Pattern's Web Site에서 Browser-Server Diaglog 아래 항목을 찾을 수 있습니다.

+0

UI (서버 리소스 없음)를 업데이트하기위한 응답이 필요합니다. 내 큰 관심사 중 하나는 동시 사용자의 수가 늘어남에 따라 어떤 옵션이 더 좋을까요? 감사. – Brian

1

AJAX 옵션은 나에게 좋을 것 같습니다. 하나의 대안은 필수 트래픽을 최소화하기위한 Comet (Ajax Push) 스타일입니다. 서버는 뭔가를 말해야 할 때 클라이언트 (브라우저)에 신호를 보냅니다 (UI 업데이트).

1

a) 은 시간 제한에 문제가있어 서버 요청을 잠글 수 있습니다 (일반적으로 제한 서버는 연결을 허용합니다). 많은 사용자가 서버에 요청을 추가하면 서버를 잠글 수 있습니다. HTTP 환경에서 필자는 필요한만큼 열린 연결 만 유지합니다.

b) 길이가 30 초이면 각 초와 같이 자주 폴링하지 않습니다. 나는 폴링 시간을 늘릴 것이다. 실행 시간은 항상 30 초입니까? 예를 폴링 스타일 (페이로드 JSON) :

 

# trigger job/execution 
POST /job 
=> response gives 301 redirect to /jobs/{job-id} 

# polling 
GET /jobs/{job-id} 
=> {status:busy} 
or 
=> {status:completed,result:...} 
 

그러나 결국이 문제에 따라

, 난 b)는 더 좋아하지만 그것을 구현하기 위해 더 많은 노력을 추가합니다. 좀 더 자세한 정보가 있으십니까? 높은 트래픽 시나리오입니까?

+0

감사합니다. 실행 시간은 항상 30 초가 아닙니다. 사실 대개는 실행 시간이 훨씬 짧습니다. 그러나 실행 시간은 더 길 수도 있습니다. 현재 동시 사용자가 10 명 미만인 트래픽은 낮습니다. 그러나 이러한 증가에 따라 최적의 확장 성을 갖춘 솔루션을 찾고 있습니다. – Brian