Move TCP settlement to systemd worker
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
require __DIR__ . '/common.php';
|
||||
|
||||
const WORKER_IDLE_SLEEP_USEC = 200000;
|
||||
|
||||
if (PHP_SAPI !== 'cli') {
|
||||
fwrite(STDERR, "tcp_worker.php must run from CLI\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$lockFp = fopen('/tmp/car_tcp_worker.lock', 'c');
|
||||
if ($lockFp === false) {
|
||||
fwrite(STDERR, "failed to open worker lock\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!flock($lockFp, LOCK_EX | LOCK_NB)) {
|
||||
fwrite(STDERR, "worker already running\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
register_shutdown_function(static function () use ($lockFp): void {
|
||||
@flock($lockFp, LOCK_UN);
|
||||
@fclose($lockFp);
|
||||
});
|
||||
|
||||
db_ensure_tcp_queue_schema(db());
|
||||
|
||||
while (true) {
|
||||
try {
|
||||
$job = tcp_queue_claim_next(db());
|
||||
if (!$job) {
|
||||
usleep(WORKER_IDLE_SLEEP_USEC);
|
||||
continue;
|
||||
}
|
||||
|
||||
tcp_worker_process_job($job);
|
||||
} catch (Throwable $e) {
|
||||
fwrite(STDERR, date('c') . ' ' . $e->getMessage() . "\n");
|
||||
usleep(1000000);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user