PHP非阻塞執行方法

2021-08-21 17:54:14 字數 992 閱讀 8473

正常訪問乙個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

/** * 會被非同步呼叫

*/sleep(10);

這時瀏覽器訪問fsockopen.php檔案,time.txt檔案中會先列印當前時間,過十秒再會列印一次當前時間。

local time is:2018-07-20 11:51:46

local time is:2018-07-20 11:51:56

php執行shell不阻塞方法

大家都知道php執行系統命令的方法有 system 輸出並返回最後一行shell結果。exec 不輸出結果,返回最後一行shell結果,所有結果可以儲存到乙個返回的陣列裡面。passthru 只呼叫命令,把命令的執行結果原樣地直接輸出到標準輸出裝置上。這些方法都會等待命令執行完畢後才會繼續執行後續的...

PHP實現非阻塞模式的方法分析

程式非阻塞模式,這裡也可以理解成併發。而併發又暫且可以分為網路請求併發和本地併發。先說一下網路請求併發 理論描述 假設有乙個client,程式邏輯是要請求三個不同的server,處理各自的響應。傳統模型當然是順序執行,先傳送第乙個請求,等待收到響應資料後再傳送第二個請求,以此類推。就像是單核cpu,...

阻塞 非阻塞

阻塞和非阻塞指 的是在接收和傳送時是否等待動作完成才返回 舉例 阻塞 block 是指,你撥通某人 的 但是此人不在,於是你拿著 等他回來,其間不能再用 非阻塞 nonblock 是指,你撥通某人 的 但是此人不在,於是你結束通話 待會兒再打。至於到時候他回來沒有,只有打了 才知道。即所謂的 輪詢 ...