Tag Archives: queue
Очередь на js
Нужно было сделать простенькую очередь, чтобы добавить много колбэков, а потом выполнить последний из очереди по таймауту, отсчитываемому от времени последнего добавления. Очередь получилась простенькая (за полчаса много и не сделаешь). Использование:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//опциональное время в милисекундах - таймаут от последнего события var queue = queueFactory( 5000 ); // у меня дёргается скрипт по определённому событию, в нём написано $( window ).bind( 'event1', function( Event, Data ) { if ( ! queue.length() ) { showLoader(); } queue.add( function() { console.log( 'event1' ); } ); } ); $( window ).bind( 'event2', function( Event, Data ) { if ( ! queue.length() ) { showLoader(); } queue.add( function() { console.log( 'event2' ); } ); } ); |
В итоге через 5 секунд после наступления последнего из событий в консоль выведется соответствующее сообщение.
Организация очередей на PHP
Решили использовать Pheanstalk, который представляет собой PHP-клиента для Beanstalk. Простой, чётко работает, всё построено на иерархии исключений, т.е. легко применять. Всё сводится к следующему:
1 2 3 4 |
$this->queueManager = new Pheanstalk( '127.0.0.1' ); $this->queueManager->useTube('my_jobs_1')->put( $JobData ); $this->job = $this->queueManager->watch('my_jobs_1')->ignore('default')->reserve( 0 ); // 0 - чтобы не ждать, когда появятся новые джобы (чтобы запускать php-скрипт кроном, а не требовать висения в памяти демоном) $this->queueManager->delete( $this->job ); |
Для работы должен быть запущен демон Beanstalk:
1 |
$ beanstalkd -d |
Ещё почитать. Интересный пример использования Pheanstalk, менее интересный пример.