php异步方案,PHP的异步实现方式
[TOC]
方法
fastcgi_finish_request()
此函數沖刷(flush)所有響應的數據給客戶端并結束請求。 這使得客戶端結束連接后,需要大量時間運行的任務能夠繼續運行,此函數需要fpm,window下無fpm無法使用
ignore_user_abort(true)
設置此函數可以忽律客戶端中斷后,保證php腳本繼續執行,此時需要解決另一個問題,如何通知客戶端進行中斷,可以設置header主動通知客戶端中斷
ob_end_clean();
header("Connection: close\r\n");
ignore_user_abort(true); // optional
ob_start();
echo ('something');
$size = ob_get_length();
header("Content-Length: $size"); // 必須寫這個長度,否則無效
ob_end_flush();
flush();
ob_end_clean();
// other thing
register_shutdown_function(function() {
sleep(10);
echo('Text user will never see');
file_put_contents('test.log', 'hello' . PHP_EOL, FILE_APPEND);
});
curl
利用curl執行另一個腳本(另一個腳本需要設置set_time_limit()),設置CURLOPT_CONNECTTIMEOUT_MS為1,1毫秒超時
$ch = curl_init();
$curl_opt = array(CURLOPT_URL, 'http://www.example.com/backend.php',
CURLOPT_RETURNTRANSFER, 1,
CURLOPT_CONNECTTIMEOUT_MS, 1);
curl_setopt_array($ch, $curl_opt);
curl_exec($ch);
curl_close($ch);
popen
打開一個新的命令,利用linux的&讓它后臺執行,window無法使用
pclose(popen("php ./test.php &", 'r'));
任務投遞
將任務序列號或參數投遞給redis或數據庫,然后開啟一個輪訓任務,不斷的去執行被投遞的任務
使用第三方框架的多進程模式
swoole
workerman
總結
以上是生活随笔為你收集整理的php异步方案,PHP的异步实现方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php中data(,如何使用php中的d
- 下一篇: php文件开放下载安全,php实现文件安