国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php 異步調用方法實現示例

2024-05-04 23:38:26
字體:
來源:轉載
供稿:網友
客戶端與服務器端是通過HTTP協議進行連接通訊,客戶端發起請求,服務器端接收到請求后執行處理,并返回處理結果
 
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執行命令,語法: 
復制代碼代碼如下:

// popen — 打開進程文件指針 
resource popen ( string $command , string $mode ) 

復制代碼代碼如下:

pclose(popen('php /home/fdipzone/doRequest.php &', 'r')); 

優點:執行速度快 

缺點:1.只能在本機執行 

2.不能傳遞大量參數 

3.訪問量高時會創建很多進程。 

3.使用curl 

設置curl的超時時間 CURLOPT_TIMEOUT 為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 

fsockopen是最好的,缺點是需要自己拼接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); // 設置執行不超時 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富川| 鹤壁市| 文山县| 比如县| 东辽县| 普兰县| 新余市| 双柏县| 龙海市| 自贡市| 北宁市| 建宁县| 滕州市| 上饶市| 厦门市| 绥滨县| 岑巩县| 化州市| 衡山县| 锡林浩特市| 湟中县| 赤壁市| 陈巴尔虎旗| 井冈山市| 麻阳| 辽宁省| 潜江市| 普宁市| 昭平县| 三原县| 江安县| 子长县| 巴彦淖尔市| 游戏| 白河县| 八宿县| 威信县| 响水县| 安仁县| 宁河县| 邹城市|