Move TCP settlement to systemd worker

This commit is contained in:
seo
2026-06-15 11:09:21 +09:00
parent f3abb812a4
commit e87716612c
4 changed files with 431 additions and 198 deletions
+44
View File
@@ -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);
}
}