php使用inotify實現隊列處理

來源:互聯網
上載者:User
首先,我們需要達成以下一些共識:

/dev/shm 為linux下的記憶體目錄,顯然在這個目錄下建立的東西會放在記憶體中,預設可以使用50%的記憶體,在記憶體不足時,可通過swap進行切換到磁碟。

inotify是linux下的檔案系統事件監控,可以滿足各種檔案監控需要,提供了諸如inotify_init,inotify_read等介面,需要linux2.6或以上的核心(uname -a查看),cygwin下好像不能實現。

php預設是不提供支援inotify的擴充,所以我們需要通過pecl下載編譯安裝。

下載inotify (http://pecl.php.net/package/inotify),解壓並安裝:

tar -xvf inotify-0.1.6.tgzcd inotify-0.1.6/usr/local/php/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-configmake && make install

接著在php.ini檔案中載入inotify.so,查看有沒有載入成功可通過php -i|grep inotify查看。

接著在/dev/shm建立記憶體目錄,因為隊列的處理是需要較高的速度,放到磁碟會有一定的I/O時間消耗,我們建立/dev/shm/inotify目錄,然後用php寫一個死迴圈的demo去監控目錄,另外,通過變更/dev/shm/inotify目錄的檔案或屬性查看結果:

使用inotify模組比不斷地迴圈和scan目錄要靈活且省資源,在inotify_read處,沒有收到任何事件之前是會一直阻塞的,所以這裡的while就不存在有沒有操作都需要迴圈執行。

嘗試在/dev/shm/inotify建立一個test.txt的新檔案,會在inotify_read返回一個包含所有檔案的數組,如:

Array(    [0] => Array        (            [wd] => 1            [mask] => 256            [cookie] => 0            [name] => test.txt        ))
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.