예제 #1
0
파일: queue.php 프로젝트: alxmsl/primitives
/**
 * This program is free software. It comes without any warranty, to
 * the extent permitted by applicable law. You can redistribute it
 * and/or modify it under the terms of the Do What The F**k You Want
 * To Public License, Version 2, as published by Sam Hocevar. See
 * http://www.wtfpl.net/ for more details.
 *
 * Queues usage example
 * @author alxmsl
 * @date 7/10/14
 */
include '../vendor/autoload.php';
use alxmsl\Connection\Redis\RedisFactory;
use alxmsl\Primitives\QueueFactory;
$Connection = RedisFactory::createRedisByConfig(array('host' => 'localhost', 'port' => 6379));
$Queue = QueueFactory::createRedisQueue('myqueue_01', $Connection);
$queue = array(1, 2, 4, 5, 6, 7, 8, 5);
foreach ($queue as $item) {
    $Queue->enqueue($item);
}
$result = array();
for (;;) {
    $item = $Queue->dequeue();
    if ($item !== false) {
        $result[] = $item;
    } else {
        break;
    }
}
$diff = array_diff($queue, $result);
var_dump(empty($diff));
예제 #2
0
 *
 * Queue pool example
 * @author alxmsl
 * @date 8/5/14
 */
include '../vendor/autoload.php';
use alxmsl\Connection\Redis\RedisFactory;
use alxmsl\Primitives\QueueFactory;
use alxmsl\Primitives\Queue\Pool\Pool;
// Create first queue
$Connection1 = RedisFactory::createRedisByConfig(array('host' => 'localhost', 'port' => 6379));
$Connection1->select(1);
$Queue1 = QueueFactory::createRedisQueue('myqueue_pool_01', $Connection1);
// Create second queue
$Connection2 = RedisFactory::createRedisByConfig(array('host' => 'localhost', 'port' => 6379));
$Connection2->select(2);
$Queue2 = QueueFactory::createRedisQueue('myqueue_pool_02', $Connection2);
// Create new pool
$Pool = new Pool();
$Pool->addQueue($Queue1)->addQueue($Queue2);
// Write to pool
$items = range(1, 5);
foreach ($items as $item) {
    $Pool->enqueue($item);
    printf("enqueued: %s\n", $item);
}
// Flush pool
while ($Item = $Pool->dequeue()) {
    printf("dequeued: %s\n", $Item);
}
var_dump($Pool->dequeue());
예제 #3
0
include '../vendor/autoload.php';
use alxmsl\Connection\Redis\RedisFactory;
use alxmsl\Primitives\QueueFactory;
use alxmsl\Primitives\Queue\Pool\Pool;
// Create first queue
$Connection1 = RedisFactory::createRedisByConfig(array('host' => 'localhost', 'port' => 6379));
$Connection1->select(1);
$Queue1 = QueueFactory::createRedisQueue('myqueue_pool_01', $Connection1);
// Create second queue
$Connection2 = RedisFactory::createRedisByConfig(array('host' => 'localhost', 'port' => 6379));
$Connection2->select(2);
$Queue2 = QueueFactory::createRedisQueue('myqueue_pool_02', $Connection2);
// Create second queue
$Connection3 = RedisFactory::createRedisByConfig(array('host' => 'localhost', 'port' => 6379));
$Connection3->select(2);
$Queue3 = QueueFactory::createRedisQueue('myqueue_pool_03', $Connection3);
// Create new pool
$Pool = new Pool();
$Pool->addQueue($Queue1)->addQueue($Queue2)->addQueue($Queue3);
for (;;) {
    $chance = mt_rand(0, 100);
    if ($chance < 25) {
        $Pool->enqueue($chance);
        printf("%s ->\n", $chance);
    } else {
        $item = $Pool->dequeue();
        if ($item === false) {
            printf("...\n");
        } else {
            printf("-> %s\n", $item);
        }