개발 꿀팁/PHP

php 비동기 호출 방법

Jammie 2022. 8. 19. 11:46
반응형

php 비동기 호출 방법

클라이언트 측과 서버 측 사이HTTP 프로토콜은 접속 통신을 하고 클라이언트는 요청을 하고 서버측은 요청을 받으면 처리를 실행하고 처리 결과를 반환합니다.

때때로 서버는 실행이 매우 소모된다그 때의 조작은, 이 조작의 결과를 클라이언트로 되돌릴 필요는 없다.단, php가 동시에 실행되기 때문에 클라이언트는 서비스 처리가 완료될 때까지 기다려야 다음 작업을 진행할 수 있습니다.걸음걸이.



따라서 시간이 걸리는 조작에 적합하다비동기적으로 실행되며, 서버가 요청을 수신하면 클라이언트에서 필요한 데이터를 처리한 후 반환되며, 다시 비동기적으로 서버에서 시간이 걸리는 작업을 수행한다.



1.Ajax 사용 및 img 태그
원리, 서버가 반환하는 html에 Ajax 코드 또는 img 태그를 삽입하여 img의 src가 실행되어야 할 프로그램입니다.

장점: 구현 간단, 서비스 제공호출할 필요 없음

단점: 실행 중, 찾아보기기기는 계속 loading 상태이기 때문에 이 방법은 진정한 비동기 호출이라고 할 수 없다

$.get("doRequest.php", { name: "fdipzone"} );
<img src="doRequest.php?name=fdipzone">

2.포펜 사용
popen을 사용하여 명령 실행레이, 문법:

// popen — 프로세스 파일 포인터 열기 
resource popen ( string $command , string $mode )
pclose(popen('php /home/fdipzone/doRequest.php &', 'r'));

장점:집행 속도가 빠르다.
결점. 할 수밖에 없다 이번 : 1기계를 실행합니다.

2.. 인자를 대량으로 전달할 수 없

3. 생성할 때 방문자 수가 높다.많다.


3. 사용하고 있다. curl
시간이 초과되었습니다. 설정한 curl시간 CURLOPT_TI최소를 위해 MEOUT 1 ( 클라이언트가 1 ).1초를 기다리고 있다

<?php
$ch = curl_init();
$curl_opt = array(
    CURLOPT_URL, 'http://www.example.com/doRequest.php'
    CURLOPT_RETURNTRANSFER,1,
    CURLOPT_TIMEOUT,1
);
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);
curl_close($ch);
?>

4.fsockopen 사용
fsocopen이 최고죠.단점은 header 부분을 직접 붙여야 한다는 것이다

<?php
 
$url = 'http://www.example.com/doRequest.php';
$param = array(
    'name'=>'fdipzone',
    'gender'=>'male',
    'age'=>30
);
 
doRequest($url, $param);
 
function doRequest($url, $param=array()){
 
    $urlinfo = parse_url($url);
 
    $host = $urlinfo['host'];
    $path = $urlinfo['path'];
    $query = isset($param)? http_build_query($param) : '';
 
    $port = 80;
    $errno = 0;
    $errstr = '';
    $timeout = 10;
 
    $fp = fsockopen($host, $port, $errno, $errstr, $timeout);
 
    $out = "POST ".$path." HTTP/1.1\r\n";
    $out .= "host:".$host."\r\n";
    $out .= "content-length:".strlen($query)."\r\n";
    $out .= "content-type:application/x-www-form-urlencoded\r\n";
    $out .= "connection:close\r\n\r\n";
    $out .= $query;
 
    fputs($fp, $out);
    fclose($fp);
}
 
?>

주의: 실행 중에 클라이언트 접속이 끊기거나 접속이 타임아웃될 경우 불완전한 실행이 발생할 수 있으므로 추가해야 합니다

ignore_user_abort(true) // 클라이언트 연결 해제 무시
set_time_limit(0) // 시간 초과 없이 실행
반응형