MultiConnect — реестр соединений
triangle/multiconnect — библиотека для Localzet Server с обработчиком GatewayServer и реестром соединений. Пакет требует PHP ^8.1 и Localzet Server ^4.5; зависимости от Triangle Engine нет.
composer require triangle/multiconnect
Переопределите callbacks обработчика для своего протокола:
<?php
use localzet\Server\Connection\ConnectionInterface;
use Triangle\MultiConnect\GatewayServer;
final class EchoGateway extends GatewayServer
{
protected function onClientMessage(
string $id,
ConnectionInterface $connection,
mixed $message,
): void {
$this->connections()->sendToClient($id, $message);
}
}
Зарегистрируйте класс обработчика в конфигурации процесса Localzet Server. В приложении Triangle это делается в config/process.php; вне Triangle используется конфигурация самого Server.
ConnectionManager управляет ID, UID, группами и отправкой сообщений соединениям текущего worker-процесса. Этот реестр не синхронизируется между workers или узлами.
Распределённая доставка
Для отправки между процессами или узлами установите необязательный пакет localzet/cluster и настройте его процессы Register, Gateway и Business. MultiConnect предоставляет адаптер к публичному клиентскому API Cluster и не реализует собственный транспорт:
use Triangle\MultiConnect\ClusterConnectionManager;
$connections = new ClusterConnectionManager();
$connections->sendToUid('user-42', ['event' => 'notice', 'text' => 'Готово']);
$connections->sendToGroup('room-7', ['event' => 'message', 'text' => 'Привет']);
Секреты и адреса внутренних процессов Cluster задаются в его конфигурации. Отправки в UID, группу и всем клиентам не возвращают число получателей; sendToClient() возвращает результат вызова Cluster. Cluster требует PHP ^8.2, тогда как базовый MultiConnect работает с PHP ^8.1 без этой зависимости.
Локальный ConnectionManager остаётся ограничен одним worker-процессом. Используйте один механизм индексации соединений для каждой операции: UID/группы в Cluster не синхронизируются с локальным реестром MultiConnect.