ホームページ  >  記事  >  バックエンド開発  >  PHP は inotify を使用してキュー処理を実装します

PHP は inotify を使用してキュー処理を実装します

WBOY
WBOYオリジナル
2016-06-20 13:01:511041ブラウズ

まず第一に、次の点について合意に達する必要があります:

/dev/shm は Linux のメモリディレクトリです。当然、このディレクトリに作成されたものはメモリに配置されます。メモリが不足している場合は、メモリの 50% を使用できます。スワップを通じてディスクにコピーします。

inotify は Linux 上のファイルシステムイベント監視で、inotify_init や inotify_read などのインターフェースを提供します (表示するには uname -a )。 cygwin では実装できません。

PHP はデフォルトで inotify をサポートする拡張機能を提供していないため、pecl を通じてダウンロード、コンパイル、インストールする必要があります。

inotify (http://pecl.php.net/package/inotify) をダウンロードし、解凍してインストールします。

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

次に、php.ini ファイルに inotify.so をロードし、php -i|grep inotify で正常にロードされたかどうかを確認します。

次に、/dev/shm にメモリ ディレクトリを作成します。これは、キューの処理には高速性が必要であり、ディスク上に配置すると一定量の I/O 時間が消費されるためです。/dev/shm/inotify ディレクトリを作成します。次に、php を使用して、ディレクトリを監視する無限ループのデモを作成します。さらに、/dev/shm/inotify ディレクトリのファイルまたは属性を変更して結果を確認します。

<?php
$notify = inotify_init();
$rs = inotify_add_watch($notify, '/dev/shm/inotify', IN_CREATE);//IN_CREATE表示只监控新文件的建立,具体参数列表可以在手册inotify处找到。
if(!$rs){
        die('fail to watch /dev/shm/inotify');
}
             
while(1){
        $files = inotify_read($notify);
        print_r($files);
        echo 'continue to process next event';
}
inotify モジュールを使用すると、継続的にループしてディレクトリをスキャンするよりも柔軟性が高く、リソースが節約されます。inotify_read では、イベントが受信されなくなるまでブロックされるため、ここに while は存在せず、ループ内で操作を実行する必要はありません。 。

/dev/shm/inotify に新しいファイル test.txt を作成しようとすると、次のようなすべてのファイルを含む配列が inotify_read で返されます。

Array
(
    [0] => Array
        (
            [wd] => 1
            [mask] => 256
            [cookie] => 0
            [name] => test.txt
        )
)

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。