Протоколы прикладного уровня
По традиции разработка на PHP основана на веб-технологиях и использует HTTP в качестве прикладного протокола. Это позволяет нам не думать о том, как он устроен сам протокол, а возложить это на Nginx, Apache или другой веб-сервер. Но вогда проект требует другого протокола (например, WebSocket) - это становится проблемой.
Прикладной уровень
При разработке проектов на LS следует помнить, что любые запросы и соединения здесь начинаются с транспортного уровня. Для этого определены классы TcpConnection и UdpConnection. После получения запроса на транспортном уровне обработка продолжается, используя декодер соответствующего протокола прикладного уровня. Такие протоколы здесь также определены в виде классов. Основные протоколы уже встроены, но вы также можете написать и использовать свои, это не сложно.
Подробнее о классах протоколов
Встроенные протоколы
На данный момент в LS встроены базовые протоколы - HTTP и WebSocket, и дополнительные - Text и Frame. Примеры использования:
<?php
use localzet\Server;
use localzet\Server\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// HTTP-сервер
$http_server = new Server("http://0.0.0.0:8000");
// WebSocket-сервер
$ws_server = new Server("websocket://0.0.0.0:8001");
// WebSocket-клиент (не путайте, протокол отличается)
$ws_client = new Server("ws://0.0.0.0:8001");
// Протокол Text
$text_server = new Server("text://0.0.0.0:8002");
// Протокол Frame
$frame_server = new Server("frame://0.0.0.0:8003");
// Запуск серверов
Server::runAll();
Если вам не требуется протокол прикладного уровня и вы хотите получать данные в чистом виде - вы можете запустить сервер на транспортном протоколе или UNIX-сокете.
<?php
use localzet\Server;
use localzet\Server\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// TCP-сервер
$tcp_server = new Server("tcp://0.0.0.0:8000");
// UDP-сервер
$udp_server = new Server("udp://0.0.0.0:8001");
// UNIX-сокет
$unix_server = new Server("unix:///run/project.sock");
// Запуск серверов
Server::runAll();