2023-08-16 分類: 網(wǎng)站建設(shè)
PHP 自己沒有多線程的東西,但可以曲線的辦法來造就出同樣的效果,比如多進程的體例來達到異步調(diào)用,只限于飭令模式。
另外還有一種更簡單的體例可用于 Web 程序中,那就是用 fsockopen()、fputs() 來請求一個 URL, 而無需等待返回,假如你在那個被請求的頁面(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);
上面的代碼向頁面 another_page.php 發(fā)送完請求就不管了四川做網(wǎng)站報名,用不著等待請求頁面的響應(yīng)數(shù)據(jù),行使這一點就可以在被請求的頁面 another_page.php 中異步的做些事情了。
比如,一個很切實的應(yīng)用,我們每當(dāng)發(fā)表了一篇新日志后需要給所有該日志的訂閱者發(fā)個郵件通知, 假如按照通常的體例就是:
日志寫完 -> 點提交按鈕 -> 日志插入到數(shù)據(jù)庫 -> 發(fā)送郵件通知 -> 告知撰寫者發(fā)布成功
那么作者在點提交按鈕到看到成功提醒之間可能會等待很常時間,基本是在等郵件發(fā)送的過程,比如連接郵件服務(wù)異常、或器緩慢或是訂閱者太多。而現(xiàn)實上是不管郵件發(fā)送成功與否,保證日志保存成功基本可接受的,所以等待郵件發(fā)送的過程是很不經(jīng)濟的,這個過程可異步來執(zhí)行,并且郵件發(fā)送的效果不太關(guān)心或以日志形式記錄備查。
改進后的流程就是:
日志寫完 -> 點提交按鈕 -> 日志插入到數(shù)據(jù)庫 ---> 告知撰寫者發(fā)布成功 ---> 發(fā)送郵件通知 -> [記下日志]
寫個現(xiàn)實的程序來測試一下上海做網(wǎng)站中心app應(yīng)用,有兩個文件,分別是 write.php 和 sendmail.php,在 sendmail.php 用 sleep(seconds) 來模擬程序執(zhí)行所使用時間。
write.php,執(zhí)行耗時 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"); #請求的資源 URL 一定要寫對 fclose($fp); } echo time().'<br>'; echo 'call asyn_sendmail<br>'; asyn_sendmail(); echo time().'<br>';
sendmail.php,執(zhí)行耗時 10 秒:
<?php sleep(10); fopen("C:/".time(),"w");
通過頁面訪問 write.php,頁面輸出:
1272472697
call asyn_sendmail
1272472698
并且在 C:/ 生成文件:
1272472708
從上面的效果可以看出 sendmail.php 至少花費 10 秒,但不會壅塞 write.php 繼續(xù)往下執(zhí)行,注解這一過程是異步的。
您可能感愛好的文章
網(wǎng)頁題目:PHP異步執(zhí)行方法,模擬多線程
分享鏈接:http://jinyejixie.com/news40/276140.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、響應(yīng)式網(wǎng)站、網(wǎng)站排名、云服務(wù)器、網(wǎng)站改版、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容