PHP 비동기 실행 방법,다 중 스 레 드 응용 분석 시 뮬 레이 션

PHP 자체 에 다 중 스 레 드 가 없 지만 곡선 을 그 리 는 방법 으로 같은 효 과 를 낼 수 있 습 니 다.예 를 들 어 다 중 프로 세 스 방식 으로 비동기 호출 을 할 수 있 고 명령 모드 에 만 제 한 됩 니 다.웹 프로그램 에 사용 할 수 있 는 더 간단 한 방법 도 있 습 니 다.그것 은 fsockopen(),fputs()로 URL 을 요청 하 는 것 입 니 다.되 돌아 오 기 를 기다 리 지 않 아 도 됩 니 다.요청 한 페이지(URL)에서 뭔 가 를 하면 비동기 에 해당 합 니 다.키 코드 는 다음 과 같 습 니 다:

<?php
  $fp = fsockopen('localhost',80,&$errno,&$errstr,5); 
  if(!$fp)
     {
         echo "$errstr ($errno)<br />/n";
     }
     fputs($fp,"GET another_page.php?flag=1/r/n");
     fclose($fp);
위의 코드 는 페이지 anotherpage.php 요청 이 끝나 면 상관 하지 않 습 니 다.요청 페이지 의 응답 데 이 터 를 기다 릴 필요 가 없습니다.이 점 을 이용 하면 요청 한 페이지 another페이지.php 에서 비동기 적 으로 뭔 가 를 했 어 요.예 를 들 어 아주 확실한 응용 프로그램 입 니 다.우 리 는 새로운 로 그 를 발표 할 때마다 이 로그 의 구독 자 에 게 메 일 알림 을 보 내야 합 니 다.일반적인 방식 으로 로그 작성->제출 버튼 을 누 르 십시오->로 그 를 데이터베이스 에 삽입 합 니 다->메 일 알림 을 보 냅 니 다->작성 자 에 게 성공 을 알 립 니 다.작성 자 는 제출 단 추 를 누 르 면 성공 알림 을 볼 때 까지 많은 시간 을 기다 릴 수 있 습 니 다.기본적으로 메 일 을 보 내 는 과정 을 기다 리 고 있 습 니 다.예 를 들 어 메 일 서비스 가 이상 하거나 느 리 거나 구독 자가 너무 많 습 니 다.실제로 메 일 발송 성공 여부 와 상 관 없 이 로그 저장 성공 을 보장 하 는 것 은 기본적으로 받 아들 일 수 있 기 때문에 메 일 발송 을 기다 리 는 과정 은 경제적 이지 않 습 니 다.이 과정 은 비동기 적 으로 실 행 될 수 있 으 며 메 일 발송 결 과 는 그다지 관심 이 없 거나 로그 형식 으로 기록 되 어 있 습 니 다.개 선 된 프로 세 스 는 로그 작성 완료->제출 버튼 을 누 르 십시오->로 그 를 데이터베이스 에 삽입 합 니 다->작성 자 발표 성공 을 알 립 니 다                                                           └메 일 알림 보 내기->[로그 기록]실제 프로그램 을 써 서 테스트 해 보 세 요.write.php 와 sendmail.php 두 개의 파일 이 있 습 니 다.sendmail.php 는 sleep(seconds)로 프로그램 이 사용 하 는 시간 을 모 의 합 니 다.write.php,실행 시간 1 초:

 <?php 
  function asyn_sendmail()
     {
         $fp = fsockopen('localhost',80,&$errno,&$errstr,5); 
      if(!$fp)
         {
            echo "$errstr ($errno)<br />/n";
         }
     sleep(1);
     fputs($fp,"GET /sendmail.php?param=1/r/n"); # URL
     fclose($fp);
    } 
 echo time().'<br>';
 echo 'call asyn_sendmail<br>';
 asyn_sendmail();
 echo time().'<br>';
sendmail.php,실행 시간 10 초:

<?php
sleep(10);
fopen("C:/" . time(),  "w"); 
페이지 를 통 해 write.php,페이지 출력:1272472697 call asynsendmail 1272472698 및 C:/파일 생 성:1272472708 위의 결 과 를 통 해 sendmail.php 가 최소 10 초 걸 리 지만 write.php 가 계속 실행 되 는 것 을 막 지 않 습 니 다.이 과정 은 비동기 임 을 나타 냅 니 다.

좋은 웹페이지 즐겨찾기