正常訪問乙個a方法,a方法需要立即返回,但是a方法會呼叫乙個b方法,b方法可能會阻塞執行很長時間(或者b方法是定時任務)。
使用fsockopen方法,請求b方法的url,並設定為非阻塞模式傳送請求
fsockopen_test.php
<?php
/*** 非阻塞請求
*@param $url
*@return bool
*/function
fsockopencurl
($url)
$fp = fsockopen($host, $port, $error_code, $error_msg, 1);
if (!$fp)
stream_set_blocking($fp, 0);//非阻塞模式
$header .= "connection: close\r\n\r\n";//長連線關閉
fwrite($fp, $header);
fclose($fp);
}
echo
'start...';
$status_update_url = '';
fsockopencurl($status_update_url);
echo
'stop...';
log.php
<?php這時瀏覽器訪問fsockopen.php檔案,time.txt檔案中會先列印當前時間,過十秒再會列印一次當前時間。/** * 會被非同步呼叫
*/sleep(10);
local time is:2018-07-20 11:51:46local time is:2018-07-20 11:51:56
php執行shell不阻塞方法
大家都知道php執行系統命令的方法有 system 輸出並返回最後一行shell結果。exec 不輸出結果,返回最後一行shell結果,所有結果可以儲存到乙個返回的陣列裡面。passthru 只呼叫命令,把命令的執行結果原樣地直接輸出到標準輸出裝置上。這些方法都會等待命令執行完畢後才會繼續執行後續的...
PHP實現非阻塞模式的方法分析
程式非阻塞模式,這裡也可以理解成併發。而併發又暫且可以分為網路請求併發和本地併發。先說一下網路請求併發 理論描述 假設有乙個client,程式邏輯是要請求三個不同的server,處理各自的響應。傳統模型當然是順序執行,先傳送第乙個請求,等待收到響應資料後再傳送第二個請求,以此類推。就像是單核cpu,...
阻塞 非阻塞
阻塞和非阻塞指 的是在接收和傳送時是否等待動作完成才返回 舉例 阻塞 block 是指,你撥通某人 的 但是此人不在,於是你拿著 等他回來,其間不能再用 非阻塞 nonblock 是指,你撥通某人 的 但是此人不在,於是你結束通話 待會兒再打。至於到時候他回來沒有,只有打了 才知道。即所謂的 輪詢 ...