|
您的位置: 首頁(yè) > 網(wǎng)站資訊 > PHP 異步執(zhí)行方法,模擬多線(xiàn)程 |
PHP 異步執(zhí)行方法,模擬多線(xiàn)程發(fā)布日期:2017/7/10
PHP 自己沒(méi)有多線(xiàn)程的東西,但可以曲線(xiàn)的辦法來(lái)造就出同樣的效果,比如多進(jìn)程的體例來(lái)達(dá)到異步調(diào)用,只限于飭令模式。 另外還有一種更簡(jiǎn)單的體例可用于 Web 程序中,那就是用 fsockopen()、fputs() 來(lái)請(qǐng)求一個(gè) URL, 而無(wú)需等待返回,假如你在那個(gè)被請(qǐng)求的頁(yè)面(URL)中做些事情就相當(dāng)于異步了。 關(guān)鍵代碼如下: <?php $fp=fsockopen('localhost',80,&$errno,&$errstr,5); if(!$fp){ echo "$errstr ($errno)<br />/n"; } fputs($fp,"GET another_page.php?flag=1/r/n"); fclose($fp); 上面的代碼向頁(yè)面 another_page.php 發(fā)送完請(qǐng)求就不管了四川做網(wǎng)站報(bào)名,用不著等待請(qǐng)求頁(yè)面的響應(yīng)數(shù)據(jù),行使這一點(diǎn)就可以在被請(qǐng)求的頁(yè)面 another_page.php 中異步的做些事情了。 比如,一個(gè)很切實(shí)的應(yīng)用,我們每當(dāng)發(fā)表了一篇新日志后需要給所有該日志的訂閱者發(fā)個(gè)郵件通知, 假如按照通常的體例就是: 日志寫(xiě)完 -> 點(diǎn)提交按鈕 -> 日志插入到數(shù)據(jù)庫(kù) -> 發(fā)送郵件通知 -> 告知撰寫(xiě)者發(fā)布成功 那么作者在點(diǎn)提交按鈕到看到成功提醒之間可能會(huì)等待很常時(shí)間,基本是在等郵件發(fā)送的過(guò)程,比如連接郵件服務(wù)異常、或器緩慢或是訂閱者太多。而現(xiàn)實(shí)上是不管郵件發(fā)送成功與否,保證日志保存成功基本可接受的,所以等待郵件發(fā)送的過(guò)程是很不經(jīng)濟(jì)的,這個(gè)過(guò)程可異步來(lái)執(zhí)行,并且郵件發(fā)送的效果不太關(guān)心或以日志形式記錄備查。 改進(jìn)后的流程就是: 日志寫(xiě)完 -> 點(diǎn)提交按鈕 -> 日志插入到數(shù)據(jù)庫(kù) ---> 告知撰寫(xiě)者發(fā)布成功 ---> 發(fā)送郵件通知 -> [記下日志] 寫(xiě)個(gè)現(xiàn)實(shí)的程序來(lái)測(cè)試一下上海做網(wǎng)站中心app應(yīng)用,有兩個(gè)文件,分別是 write.php 和 sendmail.php,在 sendmail.php 用 sleep(seconds) 來(lái)模擬程序執(zhí)行所使用時(shí)間。 write.php,執(zhí)行耗時(shí) 1 秒: <?php function asyn_sendmail(){ $fp=fsockopen('localhost',80,&$errno,&$errstr,5); if(!$fp){ echo "$errstr ($errno)<br />/n"; } sleep(1); fputs($fp,"GET /sendmail.php?param=1/r/n"); #請(qǐng)求的資源 URL 一定要寫(xiě)對(duì) fclose($fp); } echo time().'<br>'; echo 'call asyn_sendmail<br>'; asyn_sendmail(); echo time().'<br>'; sendmail.php,執(zhí)行耗時(shí) 10 秒: <?php sleep(10); fopen("C:/".time(),"w"); 通過(guò)頁(yè)面訪(fǎng)問(wèn) write.php,頁(yè)面輸出: 1272472697 call asyn_sendmail 1272472698 并且在 C:/ 生成文件: 1272472708 從上面的效果可以看出 sendmail.php 至少花費(fèi) 10 秒,但不會(huì)壅塞 write.php 繼續(xù)往下執(zhí)行,注解這一過(guò)程是異步的。 您可能感愛(ài)好的文章
|
其他相關(guān)文章 |
|
|
|
||||||||
Copyright 2012-2025 上海蒙狼網(wǎng)絡(luò)科技有限公司 www.stoneowner.cn All Rights Reserved |