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 協議》,轉載必須註明作者和本文連結