實現PHP多線程非同步請求的3種方法

來源:互聯網
上載者:User

 實現PHP多線程非同步請求的方法有很多,在本文整理了3種不多的常用方法,大家可以參考下

在網上看過很多版本的PHP非同步要求方法,這裡簡單總結幾個常用方法分享給大家  1、用CURL實現一步請求  CURL擴充是我們在開發過程中最常用的一種方法,他是一個強大的HTTP命令列工具,可以類比POST/GET等HTTP請求,然後得到和提取資料,顯示在"標準輸出"(stdout)上面。  樣本:  代碼如下:<?php $cl = curl_init(); $curl_opt = array(CURLOPT_URL, 'http://www.uncletoo.com/demo.php', CURLOPT_RETURNTRANSFER, 1, CURLOPT_TIMEOUT, 1,); curl_setopt_array($cl, $curl_opt); curl_exec($ch); curl_close($ch); ?>  由於CUROPT_TIMEOUT屬性最小值為1,這就意味著在用戶端必須等待1秒,這也是使用CURL方法的缺點  2、用popen()函數實現非同步請求  文法格式:popen(command,mode)  樣本:  代碼如下:<?php $file = popen("/bin/ls","r"); //這裡是要執行的代碼 //... pclose($file); ?>  popen()函數直接開啟一個指向進程的管道,速度快,即時相應。但是這個函數是單項的,要麼讀要麼寫,而且如果並發數較大,則會產生大量進程,給伺服器造成負擔。  另外,如同樣本中一樣,程式結束後一定要用pclose()來關閉。  3、用fscokopen()函數實現非同步請求  我們在平時開發郵件發送功能等socket編程時,都會用到這個函數,在使用這個函數之前,我們要在PHP.ini 中開啟 allow_url_fopen 選項,另外在變成時,我們還要自己手動拼接出header部分。  樣本:  代碼如下:$fp = fsockopen("www.uncletoo.com/demo.php", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />n"; } else { $out = "GET /index.php / HTTP/1.1rn"; $out .= "Host: www.uncletoo.comrn"; $out .= "Connection: Closernrn";  fwrite($fp, $out); /*這裡忽略執行結果 *測試時可以開啟 while (!feof($fp)) { echo fgets($fp, 128); }*/ fclose($fp); }  PHP本身沒有多線程,但是我們可以用其他方式來實現多線程的效果,上面列舉的三種方式都有各自的優缺點,大家在使用時可以根據程式的需要擇優選擇。  UncleToo經驗尚淺,這裡就簡單總結了這麼多,如果有其他更好的實現PHP多線程的方法可以一起討論!  
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.