PHP非阻塞實現(xiàn)方法

轉(zhuǎn)自https://www.awaimai.com/660.html

為讓 PHP 在后端處理長時間任務(wù)時不阻塞奶躯,快速響應(yīng)頁面請求,可以有如下措施:

1 使用 fastcgi_finish_request()

如果 PHP 與 Web 服務(wù)器使用了PHP-FPM(FastCGI 進程管理器),那通過fastcgi_finish_request()函數(shù)能馬上結(jié)束會話,而 PHP 線程可以繼續(xù)在后臺運行。

echo "program start...";

file_put_contents('log.txt','start-time:'.date('Y-m-d H:i:s'), FILE_APPEND);

fastcgi_finish_request();sleep(1);

echo 'debug...';file_put_contents('log.txt', 'start-proceed:'.date('Y-m-d H:i:s'), FILE_APPEND);

sleep(10);

file_put_contents('log.txt', 'end-time:'.date('Y-m-d H:i:s'), FILE_APPEND);

2 使用 fsockopen()

使用fsockopen()打開一個網(wǎng)絡(luò)連接或者一個Unix套接字連接檬嘀,再用stream_set_blocking()非阻塞模式請求:

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);

if (!$fp) { die('error fsockopen');}// 轉(zhuǎn)換到非阻塞模式

stream_set_blocking($fp, 0);

$http = "GET /save.php? / HTTP/1.1\r\n";

$http .= "Host: www.example.com\r\n";

$http .= "Connection: Close\r\n\r\n";fwrite($fp, $http);fclose($fp);

3 使用 cURL

利用cURL中的curl_multi_*函數(shù)發(fā)送異步請求

$time = time(); // 創(chuàng)建一對cURL資源

$ch1 = curl_init();

$ch2 = curl_init();

$ch3 = curl_init();// 設(shè)置URL和相應(yīng)的選項

curl_setopt($ch1, CURLOPT_URL, "http://test.xtgxiso.cn/sleep1.php");

curl_setopt($ch1, CURLOPT_HEADER, 0);

curl_setopt($ch2, CURLOPT_URL, "http://test.xtgxiso.cn/sleep2.php");

curl_setopt($ch2, CURLOPT_HEADER, 0);

curl_setopt($ch3, CURLOPT_URL, "http://test.xtgxiso.cn/sleep3.php");

curl_setopt($ch3, CURLOPT_HEADER, 0); // 創(chuàng)建批處理cURL句柄

$mh = curl_multi_init(); // 增加2個句柄

curl_multi_add_handle($mh,$ch1);

curl_multi_add_handle($mh,$ch2);

curl_multi_add_handle($mh,$ch3);

$running=null; // 執(zhí)行批處理句柄

do { usleep(10000); curl_multi_exec($mh,$running); } while ($running > 0); // 關(guān)閉全部句柄

curl_multi_remove_handle($mh, $ch1);

curl_multi_remove_handle($mh, $ch2);

curl_multi_remove_handle($mh, $ch3);

curl_multi_close($mh);

echo "\n total time : ".(time()-$time)."\n";

5 使用緩存和隊列

使用redis等緩存、隊列责嚷,將數(shù)據(jù)寫入緩存鸳兽,使用后臺計劃任務(wù)實現(xiàn)數(shù)據(jù)異步處理。

6 調(diào)用系統(tǒng)命令

極端的情況下再层,可以調(diào)用系統(tǒng)命令贸铜,可以將數(shù)據(jù)傳給后臺任務(wù)執(zhí)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市聂受,隨后出現(xiàn)的幾起案子蒿秦,更是在濱河造成了極大的恐慌,老刑警劉巖蛋济,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棍鳖,死亡現(xiàn)場離奇詭異,居然都是意外死亡碗旅,警方通過查閱死者的電腦和手機渡处,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祟辟,“玉大人医瘫,你說我怎么就攤上這事【衫В” “怎么了醇份?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吼具。 經(jīng)常有香客問我僚纷,道長,這世上最難降的妖魔是什么拗盒? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任怖竭,我火速辦了婚禮,結(jié)果婚禮上陡蝇,老公的妹妹穿的比我還像新娘痊臭。我一直安慰自己,他們只是感情好毅整,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布趣兄。 她就那樣靜靜地躺著,像睡著了一般悼嫉。 火紅的嫁衣襯著肌膚如雪艇潭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天戏蔑,我揣著相機與錄音蹋凝,去河邊找鬼。 笑死总棵,一個胖子當(dāng)著我的面吹牛鳍寂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播情龄,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼迄汛,長吁一口氣:“原來是場噩夢啊……” “哼捍壤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鞍爱,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤鹃觉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后睹逃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盗扇,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年沉填,在試婚紗的時候發(fā)現(xiàn)自己被綠了疗隶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡翼闹,死狀恐怖斑鼻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猎荠,我是刑警寧澤卵沉,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站法牲,受9級特大地震影響史汗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拒垃,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一停撞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧悼瓮,春花似錦戈毒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至命贴,卻和暖如春道宅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背胸蛛。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工污茵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人葬项。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓泞当,卻偏偏與公主長得像,于是被迫代替她去往敵國和親民珍。 傳聞我的和親對象是個殘疾皇子襟士,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成盗飒,其中,內(nèi)核的設(shè)計非常微小和簡潔陋桂,完成的工作也非常簡單...
    rosekissyou閱讀 10,222評論 5 124
  • 前言 最先接觸編程的知識是在大學(xué)里面章喉,大學(xué)里面學(xué)了一些基礎(chǔ)的知識,c語言身坐,java語言秸脱,單片機的匯編語言等;大學(xué)畢...
    oceanfive閱讀 3,095評論 0 7
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理部蛇,服務(wù)發(fā)現(xiàn)摊唇,斷路器,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • 我們沒有在一起 不用臆想太多 別累著了 有意思啊有意思
    小蛋黃一個閱讀 167評論 0 0
  • 咦…… 發(fā)布后發(fā)現(xiàn) 這三個字 致自己 聽起來好雞湯 好俗 早上登網(wǎng)絡(luò)后 發(fā)現(xiàn)朋友圈 好多跨年總結(jié)展望 好多情侶 我...
    去社閱讀 150評論 0 0