欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

php libevent 用法

錢良釵1年前7瀏覽0評論
PHP已經成為了很多Web開發者和企業的首選語言。PHP編寫的Web應用程序,往往需要異步、并發、高性能、高可擴展等強大特性。libevent是這個環境下開發人員的不二之選。 libevent是一個開源的C語言庫,簡單易用,性能極佳。它的適用范圍十分廣泛,并被廣泛地用于網絡服務器、代理、負載均衡器等底層開發領域。而在PHP開發領域,libevent是一個非常重要的工具庫之一。下面,我們重點介紹一下libevent在PHP編程中的使用方法及應用場景。 一、環境安裝 因為libevent是一個C語言類庫,因此,在PHP中使用它,需要先進行環境安裝。首先,需要安裝PHP的PIE擴展,以支持針對libevent進行異步IO操作。 在Linux環境下,可以直接通過yum等方式,安裝必要的依賴。 # yum -y install libevent-devel gcc-c++ php-pear php-psr 然后,可以使用pecl安裝event擴展: # pecl install event 二、基礎用法 home頁面的來源: //PHP $data = array("data1","data2","data3","data4","data5","data6","data7","data8","data9","data10"); foreach ($data as $v) { file_get_contents('http://localhost:8080?a='.$v); } 同時開啟一個服務端程序,用于接收請求,并返回接收到的參數。 // PHP $base = event_base_new(); $http = event_new(); if ( ! event_http_bind($http, "0.0.0.0", 8080) ) { exit("failed bind host."); } function recv_callback($fd, $event, $arg) { $s = event_buffer_read($arg, 1024); echo $s.'-recv '; if ( ! empty($s) ) { event_buffer_write($arg, "recv:" . $s, strlen($s) + 5); } } $event_buffer = event_buffer_new(STDIN, "recv_callback", NULL, NULL, $base); event_buffer_base_set($event_buffer, $base); event_buffer_enable($event_buffer, EV_READ | EV_PERSIST); event_set($http, 0, EV_READ | EV_PERSIST, function($x, $flag, $arg) { $base = $event = $arg[0]; $fd = event_http_accept($event); event_buffer_new($fd, NULL, NULL, NULL, $base); }, array($base, $http)); event_base_loop($base); 以上是一個簡單的用例,這里我們來看一下怎么使用libevent來實現異步HTTP請求。下面是一個獲取大量數據的curl同步代碼。 // PHP foreach ($urls as $i =>$url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $out = curl_exec($ch); curl_close($ch); $results[$i] = $out; } 使用libevent,我們改寫一下上面的同步代碼,來實現異步的HTTP請求。 // PHP $base = event_base_new(); $mh = curl_multi_init(); foreach ($urls as $i =>$url) { $ch[$i] = curl_init($url); curl_setopt($ch[$i], CURLOPT_HEADER, 0); curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($mh, $ch[$i]); } // 這里event_new執行的時候,第2個參數傳false即可 $event_base = event_base_new(); $event = event_new(); event_set($event, curl_multi_socket_all($mh), EV_READ | EV_PERSIST, function($ch, $flag, $arg) { }, $mh); event_base_set($event, $event_base); event_add($event); while ($active && ($mrc = curl_multi_exec($mh, $active)) >= 0) { if ($mrc !== CURLM_OK) { break; } event_base_loop($event_base, EVLOOP_ONCE); } for ($i = 0; $i< count($urls); $i++) { $out = curl_multi_getcontent($ch[$i]); curl_multi_remove_handle($mh, $ch[$i]); $results[$i] = $out; } curl_multi_close($mh); 這段柿子tcl_map索引掃一掃離線解析 http://www.opensourcemap.com/docs/tcl/tcl_map.html 包含兩個部分。我們首先通過curl_multi_init函數初始化一個curl多線程句柄,然后通過curl_multi_add_handle函數添加cURL句柄。然后,再通過事件循環,設置回調函數,監聽消息是否到達。最后,緩存請求結果,通過curl_multi_remove_handle函數釋放cURL句柄,然后關閉$mh句柄。 在實際使用過程中,libevent確實有幫助到開發者,但是需要注意的是,如果初學者想要應用libevent開發PHP應用程序,還需要耐心學習,真正理解其在底層開發領域中的優秀特性及用法。