swoole4.5.2和hyperf2.0如何實現共享佇列

fengchezhi發表於2020-08-17

swoole實現共享佇列

程式間實現非同步io,一般的想法是採用redis佇列。基於swoole開發的話,還可以通過高效能共享記憶體Table來實現佇列。

從swoole官網http教程複製程式碼,並且配置4個worker程式,模擬多個生產者

從swoole官網定時器教程複製程式碼,模擬一個消費者

<?php

// 高效能共享記憶體 Table
$table = new \Swoole\Table(3);
$table->column('json', \Swoole\Table::TYPE_STRING, 1024);
$table->create();

// http伺服器
$http = new \Swoole\Http\Server('0.0.0.0', 9501);
$http->set([
    'worker_num' => 4,
]);
$http->table = $table;
$http->on('request', function ($request, $response) use ($http) {

    if ($request->server['path_info'] == '/favicon.ico' || $request->server['request_uri'] == '/favicon.ico') {
        $response->end();
        return;
    }

    for ($i = 1; $i < 6; $i++) {
        $http->table->set($i, ['json' => rand(1000, 9999)]);
    }

    $response->header("Content-Type", "text/html; charset=utf-8");
    $response->end("<h1>Hello Swoole. #" . rand(1000, 9999) . "</h1>");
});

// 定時器
\Swoole\Timer::tick(3000, function () use ($http) {

    foreach ($http->table as $key => $value) {
        var_dump($key, $value);
        $http->table->del($key);
    }
});

// 啟動服務
$http->start();
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章