WS — WebSocket-сборка
triangle/ws — экспериментальный WebSocket-first шаблон Triangle на базе Localzet Server. Его код принимает HTTP WebSocket handshake, выбирает маршрут по URL и передаёт текстовые кадры зарегистрированному обработчику. Это отдельный трек; до выбора проверьте, что приложению нужен именно такой lifecycle.
Фактические границы
- Шаблон по умолчанию запускает один worker. Несколько worker-процессов требуют отдельного механизма общей координации соединений и рассылки.
- API
Connection, автоматические комнаты, session на connection и распределённая рассылка в текущем пакете отсутствуют. Triangle\Ws\App::sendToAll()иsendToGroup()отправляют кадры через серверные соединения текущего процесса.sendToGroup()ограничен URL-путём текущего соединения, а не произвольным именем комнаты.- Межпроцессная синхронизация, reconnect и backpressure не предоставляются этим приложением как готовая функция.
WS — экспериментальный трек. Не планируйте горизонтальное масштабирование на основе API, которого нет в коде. Версии компонентов смотрите в матрице совместимости.
Установка и запуск
composer create-project triangle/ws my-ws-app
cd my-ws-app
php master start
Шаблон слушает websocket://0.0.0.0:8080 из config/server.php. Для локальной проверки клиент подключается к ws://127.0.0.1:8080.
Обработчик сообщения
WS маршрут регистрируется в исполняемом config/route.php. Сообщение кадра передаётся callback как строка; возвращённое значение отправляется этому соединению:
<?php
use Triangle\Router;
use Triangle\Ws\Response;
Router::any('/echo', function (?string $message): Response {
return new Response(200, [], $message ?? '');
});
Клиент:
const socket = new WebSocket('ws://127.0.0.1:8080/echo')
socket.onopen = () => socket.send('hello')
socket.onmessage = (event) => console.log(event.data)
Для сложных обработчиков изучите Triangle\Ws\App::onWebsocketConnect(), onMessage() и onClose() в triangle/engine-ws: начальный handshake и последующие кадры проходят через route callback с разным содержимым запроса.