PHP 비동기 실행 방법,다 중 스 레 드 응용 분석 시 뮬 레이 션
<?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 가 계속 실행 되 는 것 을 막 지 않 습 니 다.이 과정 은 비동기 임 을 나타 냅 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Laravel - 변환된 유효성 검사 규칙으로 API 요청 제공동적 콘텐츠를 위해 API를 통해 Laravel CMS에 연결하는 모바일 앱(또는 웹사이트) 구축을 고려하십시오. 이제 앱은 CMS에서 번역된 콘텐츠를 받을 것으로 예상되는 다국어 앱이 될 수 있습니다. 일반적으로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.