Протоколы прикладного уровня

По традиции разработка на 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();