Перейти к содержимому
docs.
WORKSPACE

Документации проектов

Открыть каталог проектов
Localzet ServerАсинхронный PHP-сервер✓TriangleФреймворк и компонентыMIX IDИдентификация и интеграцииHack APIПубличные API хакатонаACNПроект и компонентыUserlay / UserNetПроект и компонентыAxiomПроект и компонентыМесседжинг через почтуПроект и компонентыLWT / JWT / JOSEПроект и компонентыФинансовая аналитика KimaiПроект и компонентыМультипарадигмальная БДПроект и компонентыZorin PlatformПроект и компонентыZorin TrustПроект и компонентыFloraScope / VegwatchПроект и компонентыaegis-qДокументация проектаaevumdbДокументация проектаauditДокументация проектаauto-invest-managerАвтотрейдерcaine-companionДокументация проектаcertbot-cloudflareДокументация проектаClusterLocalzet Server / ClustercmdveilДокументация проектаConsolePHP CLICronБиблиотеки Localzet Serverdata-connectorДокументация проектаdevice-controlDevice Controlenn-projectДокументация проектаEventsБиблиотеки Localzet ServerflowsintДокументация проектаforgeДокументация проектаHttpClientБиблиотеки Localzet ServerinterpreterСобственный языкinvariaДокументация проектаkeynotesДокументация проектаknotrouteKnotroutelaravel-personal-analyticsДокументация проектаlocalzet-osДокументация проектаmeridianДокументация проектаMQTTБиблиотеки Localzet Servernano-kernelСобственная ОСNoterДокументация проектаpersonal-analyticsДокументация проектаProxyБиблиотеки Localzet ServerPSRБиблиотеки Localzet ServerPSR-7Библиотеки Localzet Serverrschs-monitorДокументация проектаsemsealДокументация проектаshardsealДокументация проектаSocketIOБиблиотеки Localzet ServerSOCKS5Библиотеки Localzet Serverstandalone-analyticsДокументация проектаstatic-php-cliДокументация проектаStorageБиблиотеки Localzet ServersutureДокументация проектаtempoweaveДокументация проектаttsСинтез речиTunnelБиблиотеки Localzet Serverui-kitUI KitvesperДокументация проектаWebAnalyzerWebAnalyzerzorin-access-brokerДокументация проектаzorin-authority-brokerДокументация проектаzorin-authority-sdk-phpДокументация проектаzorin-authority-sdk-pythonДокументация проектаzorin-authority-sdk-tsДокументация проектаzorin-client-intelДокументация проектаzorin-device-core-aospДокументация проектаzorin-host-agentДокументация проектаzorin-native-labДокументация проектаzorin-nodeДокументация проектаzorin-opsДокументация проектаdonstu-python-sdkДокументация проектаfloortraceFloortraceserver-rsLocalzet Server / Cluster
Каталог
Документация/Localzet Server

Timer: расписание и границы блокировки

Класс — localzet\Timer. Интервалы — float секунды; callback получает элементы args как позиционные аргументы. Таймер работает в выбранном event loop текущего процесса. Это не постоянная scheduled job и не координация workers.

МетодПоведение
init(?EventInterface $event = null): voidЯвный loop, global loop Server либо новый Select
repeat(float $interval, callable $callback, array $args = []): intID повторяющегося таймера
delay(float $delay, callable $callback, array $args = []): intID одноразового таймера
add(float $interval, callable $callback, ?array $args = [], bool $persistent = true): intСовместимый wrapper repeat/delay
del(int $id): boolУдаление таймера; false, если регистрации нет
delAll(): voidУдаляет все таймеры loop, в том числе таймеры других частей приложения
getAll(): arrayДиагностика ['count' => integer], не список определений
sleep(float $delay): voidПриостанавливает только с SuspensionCapableInterface backend; иначе блокирующий usleep
signalHandle(): voidCompatibility no-op; отдельного SIGALRM scheduler нет

Отрицательный интервал вызывает RuntimeException. Для пользовательского ввода также отсекайте не-конечные числа и ограничивайте максимум: проверка только на отрицательное значение не является полной validation policy. Точность зависит от loop/ОС и нагрузки. Ноль не означает гарантированную частоту выполнения.

Пример явно запускает Select loop без Server: проверены отмена, одноразовый callback с аргументом, остановка loop и диагностический count.

<?php
declare(strict_types=1);
use localzet\Timer;
use localzet\Server\Events\Select;
require __DIR__ . '/vendor/autoload.php';
$loop = new Select();
Timer::init($loop);
$messages = [];
$cancelled = Timer::repeat(0.005, static function (): void {
throw new RuntimeException('Cancelled timer executed');
});
Timer::del($cancelled);
Timer::delay(0.01, static function (string $message) use (&$messages): void {
$messages[] = $message;
}, ['hello']);
Timer::delay(0.03, static function () use ($loop): void {
$loop->stop();
});
$loop->run();
if ($messages !== ['hello'] || Timer::getAll() !== ['count' => 0]) {
throw new RuntimeException('Unexpected timer state');
}
echo "timer-example-ok\n";
Окно терминала
php timers.php

Поместите файл рядом с vendor/autoload.php. Ожидается timer-example-ok. Подготовка примеров задаёт закреплённую ревизию исходников.

Регистрируйте таймеры в onServerStart/onConnect по назначению, а не в pre-fork master для request-specific работы. Храните ID у владельца/context и удаляйте при закрытии соединения. Closure с connection удерживает объект в памяти. Не используйте delAll() для очистки одного соединения. Повторяющийся callback должен быть коротким, обрабатывать ошибки и явно координировать пересекающуюся внешнюю работу.

Timer::sleep не всегда асинхронный. С Select он блокирует worker; при suspension-capable backend всё равно нужен поддерживаемый coroutine/Fiber context. Для простого расписания предпочтительны delay/repeat. Сам event loop не делает блокирующие HTTP, SQL и file access асинхронными.