2012-10-05 7 views
2

사용자가 백그라운드 프로세스를 시작할 수있는 페이지가 있습니다. 사용자가 페이지를 새로 고치거나 탭이나 브라우저를 닫을 때이 프로세스를 중지하고 싶습니다. connection_abort()을 시도했지만 행운은 없습니다. 스크립트는 계속 실행됩니다. 아이디어가 있으십니까?PHP 백그라운드 프로세스 중지

+0

'websockets'은 그 트릭을 할 수 있습니다. – Baba

답변

0

나는 운이다고 생각합니다. http은 상태가 유지되지 않는 프로토콜이므로 페이지가 제공되는 즉시 연결이 닫힙니다.

일부 아약스 트릭 외에도 사용자가 브라우저를 새로 고치거나 닫는 것을 알 수있는 방법이 없습니다. 당신이 사용자에 대한 고유 식별자를 가지고 있고,이 연결 또는 프로세스 ID와 함께 저장 될 수있는 경우

+0

이렇게 고맙습니다. 어쨌든 고맙습니다. – slash197

0

, 다음과 같은 논리는 일할 수 :

  1. 사용자 요청 페이지
  2. 사용자는 고유 주어집니다 id
  3. 백그라운드 프로세스가 시작되고 ID가 사용자 ID와 함께 데이터베이스에 기록됩니다.
  4. 프로세스는 선택한 빈도로 데이터베이스를 검사하여 데이터베이스에 기록합니다 또는 예상대로 진행되지 않으면 프로세스가 중단됩니다.
  5. 그런 다음 사용자가 어떤 프런트 엔드 수 중 하나를 아약스를 통해
    • 트리거 스크립트 (즉 stop_process.php 사용자 ID =?)가 필요 - 즉 페이지가 멀리 이동할 때. 특정 브라우저에서 ajax 요청을 방지 또는 중지하기 때문에이 방법은 신뢰할 수 없습니다.
    • 타임 스탬프가있는 db의 프로세스 레코드를 계속 업데이트하는 아약스 폴링 스크립트가 있습니다.이 스탬프가 오래된 경우 (사용자가 js를 탐색하거나 중지 한 경우) 프로세스가 중지됩니다. 타깃이 잠겨 할 수있는 경우 그래서 아마 단지 정말로 필요한 경우로 간주되어야하거나 (이 자바 스크립트에 의존로서 가능성이 변덕)

은 위의 다소 관련 솔루션 입니다.

비 js 솔루션으로 폴링 방법에 의존하고 메타 새로 고침 프레임을 설정할 수 있습니다. 그러나 이것은 이전 버전의 Internet Explorer 사용자에게 지속적인 '클릭'을 미칠 수 있습니다. 솔루션이 오히려 우아하지는 않습니다.

관련 문제