Tunnel: начало работы
Tunnel передаёт события между процессами Localzet Server. Стабильная линия 2.x рассчитана на Server 4; текущие исходники для Server 7 пока устанавливаются из dev-main:
composer require localzet/tunnel:dev-main
Поднимите сервер каналов
Создайте tunnel.php:
<?php
use localzet\Server;
use localzet\Tunnel\Server as TunnelServer;
require __DIR__ . '/vendor/autoload.php';
new TunnelServer('frame://127.0.0.1:2206');
Server::runAll();
Запустите его штатной CLI-командой Server (php tunnel.php start). Сокет привязан к loopback: для межузлового соединения задайте закрытый адрес и firewall ACL.
Подпишитесь и опубликуйте
В процессе приложения зарегистрируйте callback и подключите клиента:
use localzet\Tunnel\Client;
Client::connect('frame://127.0.0.1:2206');
Client::on('cache.updated', static function (mixed $data): void {
// Update local process state from the event payload.
});
Client::publish('cache.updated', ['key' => 'item-1']);
Сначала вызовите connect(), затем зарегистрируйте событие: on() сразу отправляет серверу подписку. Вызывайте это один раз при старте процесса внутри event loop Server, а не на каждый запрос. По умолчанию wire format использует PHP serialization, но object deserialization на принимающей стороне выключена; передавайте скаляры и массивы. Оба процесса должны использовать один и тот же формат.
Публикация — доставка активным подписчикам, а не долговременная гарантия: состояние соединений и очереди находятся в памяти. Проверяйте reconnect, повторную доставку и shutdown. Дополнительные методы очереди и настройки сериализации описаны в API и эксплуатации.

