利用PHP V5開發(fā)多任務(wù)應(yīng)用程序(2)_PHP教程
推薦:詳細(xì)解析 PHP 向 MySQL 發(fā)送數(shù)據(jù)過(guò)程下面的一段代碼是一個(gè)很簡(jiǎn)單的 HTML 表單: <html> <body> <formaction=submitform.php3method=GET> 姓:<inputtype=textname=fir
只粗略地涉及 PHP 的第三個(gè)并發(fā)實(shí)例是 PHP/TK。PHP/TK 是 PHP 的擴(kuò)展,用于為核心 PHP 提供可移植圖形用戶界面(GUI)綁定。PHP/TK 允許用 PHP 編寫代碼構(gòu)造桌面 GUI 應(yīng)用程序。其基于事件的特性將模擬一種易于掌握并且比線程更少出錯(cuò)的并發(fā)形式。此外,并發(fā)是 “繼承” 自一項(xiàng)輔助技術(shù),而不是 PHP 的基本功能。
向 PHP 本身添加線程支持的試驗(yàn)已經(jīng)做過(guò)多次。據(jù)我所知,沒(méi)有一次是成功的。但是,Ajax 框架和 PHP/TK 的面向事件的實(shí)現(xiàn)表明事件可能比線程能更好地體現(xiàn) PHP 的并發(fā)。PHP V5 證明事實(shí)確實(shí)如此。
PHP V5 將提供 stream_select()
使用標(biāo)準(zhǔn)的 PHP V4 和更低版本,必須按順序執(zhí)行 PHP 應(yīng)用程序的所有工作。例如,如果程序需要在兩個(gè)商業(yè)站點(diǎn)檢索商品的價(jià)格,則請(qǐng)求第一個(gè)站點(diǎn)的價(jià)格,等待至響應(yīng)到達(dá),再請(qǐng)求第二個(gè)站點(diǎn)的價(jià)格,然后再次等待。
如果程序請(qǐng)求同時(shí)完成若干項(xiàng)任務(wù)會(huì)怎么樣?總體來(lái)看,程序?qū)⒃谝欢螘r(shí)間內(nèi)完成,在這段時(shí)間內(nèi),將始終進(jìn)行連續(xù)處理。
第一個(gè)示例
新的 stream_select 函數(shù)及它的幾個(gè)助手使這成為可能。請(qǐng)考慮以下示例。
清單 1. 同時(shí)請(qǐng)求多個(gè) HTTP 頁(yè)面
| <?php echo "Program starts at ". date('h:i:s') . ". "; $timeout=10; $result=array(); $sockets=array(); $convenient_read_block=8192; /* Issue all requests simultaneously; there's no blocking. */ $delay=15; $id=0; while ($delay > 0) { $s=stream_socket_client("phaseit.net:80", $errno, $errstr, $timeout, STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT); if ($s) { $sockets[$id ]=$s; $http_message="GET /demonstration/delay?delay=" . $delay . " HTTP/1.0 Host: phaseit.net "; fwrite($s, $http_message); } else { echo "Stream " . $id . " failed to open correctly."; } $delay -= 3; } while (count($sockets)) { $read=$sockets; stream_select($read, $w=null, $e=null, $timeout); if (count($read)) { /* stream_select generally shuffles $read, so we need to compute from which socket(s) we're reading. */ foreach ($read as $r) { $id=array_search($r, $sockets); $data=fread($r, $convenient_read_block); /* A socket is readable either because it has data to read, OR because it's at EOF. */ if (strlen($data) == 0) { echo "Stream " . $id . " closes at " . date('h:i:s') . ". "; fclose($r); unset($sockets[$id]); } else { $result[$id] .= $data; } } } else { /* A time-out means that *all* streams have failed to receive a response. */ echo "Time-out! "; break; } } ?> |
分享:PHP實(shí)現(xiàn)靜態(tài)發(fā)布的方法淺談如今很多網(wǎng)站都是靜態(tài)發(fā)布的,PHP當(dāng)然也可以方便的實(shí)現(xiàn)靜態(tài)發(fā)布嘍,具體的實(shí)現(xiàn)方法很多,下面我就說(shuō)說(shuō)我會(huì)的兩種方法。 方法一:ob_get_contents() 這是一種很方便的方法,也是很常用的方法
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁(yè)面代碼執(zhí)行時(shí)間
- PHP中獎(jiǎng)概率的抽獎(jiǎng)算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對(duì)圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問(wèn)控制的和運(yùn)算符優(yōu)先級(jí)介紹
- 關(guān)于PHP語(yǔ)言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國(guó)語(yǔ)言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
PHP教程Rss訂閱編程教程搜索
PHP教程推薦
- php二維數(shù)組排序與默認(rèn)自然排序的方法介紹
- 解析PHP安裝十大問(wèn)題
- PHP取得上層目錄實(shí)例代碼
- 計(jì)算php頁(yè)面運(yùn)行時(shí)間的函數(shù)介紹
- 淺析php插件 HTMLPurifier HTML解析器
- Oracle與PHP實(shí)例開發(fā)Myers訂單跟蹤系統(tǒng)
- PHP初學(xué):實(shí)例詳細(xì)學(xué)習(xí)PHP的簡(jiǎn)單語(yǔ)法
- PHP與正則表達(dá)系列之一: PHP中的正則表達(dá)式
- 用PHP程序?qū)崿F(xiàn)刪除目錄的三種方法實(shí)例
- php數(shù)組排序
- 相關(guān)鏈接:
- 教程說(shuō)明:
PHP教程-利用PHP V5開發(fā)多任務(wù)應(yīng)用程序(2)
。