Перейти к содержимому
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 Server✓ui-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
Каталог

Tunnel — API

МетодНазначение
connect(?string $socketName = null): voidСоздать одно статическое соединение, если его ещё нет. Передайте адрес при первом вызове.
on(string $event, callable $callback): voidУстановить callback события и подписаться.
`subscribe(arraystring $events): void`
`unsubscribe(arraystring $events): void`
`publish(arraystring $events, mixed $data, bool $isLoop = false): void`
`watch(arraystring $channels, callable $callback, bool $autoReserve = true): void`
`unwatch(arraystring $channels): void`
`enqueue(arraystring $channels, mixed $data): void`
reserve(): voidОбъявить готовность получить очередное задание по наблюдаемым очередям.
clearTimer(): voidУдалить внутренние ping/reconnect timers. Это не полный disconnect и не удаление подписок.

subscribe, unsubscribe, watch, unwatch и reserve используют send(), которое требует среды Server. publish/enqueue идут через отдельный sendAnyway, но standalone-ветка подключения содержит описанную в руководстве ошибку работы с resource.

Публичные callback-поля: $onMessage($channel, $data), $onConnect(), $onClose(). $pingInterval по умолчанию 25 секунд. Ping отправляет пустое сообщение, а не проверяет подтверждение сохранения данных сервером.

onConnect() повторяет event-subscriptions и очищает внутренние timers, в том числе ping-timer. Наличие публичного pingInterval не обещает, что heartbeat будет продолжаться после этой очистки. onClose() ставит reconnect через повторяющийся Timer с интервалом 1 секунда.

При приёме event callback получает только $data; общий onMessage получает $channel и $data. Queue callback получает $data. Событие и очередь с одинаковым именем имеют разные maps callbacks.

Команды сериализуются как JSON либо PHP serialize в зависимости от флага соединения:

{"type":"publish","channels":["order.created"],"data":{"id":42}}
ТипДополнительные поля
subscribe, unsubscribe, watch, unwatchchannels: массив строк.
publish, publishLoop, enqueuechannels и data.
reserveВ клиентской команде channels не задаётся; сервер использует список watchs соединения.

Ответ событийной рассылки: {"type":"event","channel":"order.created","data":...}. Ответ очереди использует type = queue. На сервере обработчик до switch обращается к полю channels без проверки наличия; для reserve возможна PHP-диагностика отсутствующего ключа, хотя ветка использует watchs.

Формат payload и framing транспорта — разные слои. При выборе Frame TCP-данные должны иметь заголовок протокола Server; передача одного JSON без framing не является тем же socket protocol.

Конструктор принимает ?string $socketName = null и bool $debug = false. При заданном адресе регистрирует handler через localzet_start() с count=1 и reloadable=false.

onServerStart() сохраняет ссылку на Server и создаёт карту каналов. onMessage() обрабатывает команды. onClose() удаляет event-subscriptions и watchers закрытого соединения, а пустые очереди без watchers удаляет из карты.

Queue использует SplQueue и две карты — watcher и consumer. addWatch/removeWatch меняют наблюдение, addConsumer добавляет готовность и вызывает dispatch, enqueue добавляет данные и тоже вызывает dispatch.

isEmpty() означает, что нет watchers и нет данных. Это не признак отсутствия одного ожидающего consumer. Очередь живёт только в памяти единственного сервера и не восстанавливает выданные сообщения после сбоя.