天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP 異步執(zhí)行方法,模擬多線程的應(yīng)用分析

php 本身沒(méi)有多線程的東西,但可以曲線的辦法來(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)鍵代碼如下:
復(fù)制代碼 代碼如下:
<?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)求就不管了,用不著等待請(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ù)異常、或器緩慢或是訂閱者太多。而實(shí)際上是不管郵件發(fā)送成功與否,保證日志保存成功基本可接受的,所以等待郵件發(fā)送的過(guò)程是很不經(jīng)濟(jì)的,這個(gè)過(guò)程可異步來(lái)執(zhí)行,并且郵件發(fā)送的結(jié)果不太關(guān)心或以日志形式記錄備查。
改進(jìn)后的流程就是:
日志寫(xiě)完 -> 點(diǎn)提交按鈕 -> 日志插入到數(shù)據(jù)庫(kù) ---> 告知撰寫(xiě)者發(fā)布成功
                                                           └ 發(fā)送郵件通知 -> [記下日志]
寫(xiě)個(gè)實(shí)際的程序來(lái)測(cè)試一下,有兩個(gè)文件,分別是 write.php 和 sendmail.php,在 sendmail.php 用 sleep(seconds) 來(lái)模擬程序執(zhí)行所使用時(shí)間。
write.php,執(zhí)行耗時(shí) 1 秒:
復(fù)制代碼 代碼如下:
 <?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 秒:
復(fù)制代碼 代碼如下:
<?php
sleep(10);
fopen("C:/" . time(),  "w"); 

通過(guò)頁(yè)面訪問(wèn) write.php,頁(yè)面輸出:
1272472697
call asyn_sendmail
1272472698
并且在 C:/ 生成文件:
1272472708
從上面的結(jié)果可以看出 sendmail.php 至少花費(fèi) 10 秒,但不會(huì)阻塞 write.php 繼續(xù)往下執(zhí)行,表明這一過(guò)程是異步的。

php技術(shù)PHP 異步執(zhí)行方法,模擬多線程的應(yīng)用分析,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 久久视频这只精品99re6 | 一级毛片免费在线播放 | 精品无码国产污污污免费网站2 | 97资源总站(中文字幕) | 最近中文字幕2019国语4 | 男人一生要读的书 | 啦啦啦影院视频在线看高清... | 免费无遮挡又黄又爽网站 | av免费网站不卡观看 | 一品道门免费视频韩国 | 九九九九九热 | 亚洲精品久久久久无码AV片软件 | 有人在线观看的视频吗免费 | 综合久久久久久久综合网 | 国产欧美二区综合 | 日本特黄的免费大片视频 | 本庄优花aⅴ全部在线影片 被滋润的艳妇疯狂呻吟白洁老七 | 国产99在线视频 | 欧美日韩另类在线观看视频 | 亚洲色欲色欲WWW在线成人网 | 国产一级做a爰片久久毛片男 | 国产精品永久免费 | 视频成人永久免费看 | gogogo免费视频观看 | 99精品视频在线观看免费 | 国产69精品久久久久乱码 | 国产欧美日韩综合精品一区二区 | 亚洲 欧洲 国产 日产 综合 | 国产在线aaa片一区二区99 | 两个女人互添下身高潮自视频 | 高H高肉强J短篇校园 | 精品国产人成亚洲区 | 扒开胸罩揉她的乳尖视频 | 亚洲成 人a影院青久在线观看 | 吃胸亲吻吃奶摸下面免费视频 | yellow在线中文 | 亚洲欧美一级久久精品 | 国产特级毛片AAAAAAA高清 | 97人妻AV天天澡夜夜爽 | 成人天堂资源WWW在线 | 久久精品视频在线直播6 |