Структура приложения
Server не требует конкретного MVC-каркаса. Разделите bootstrap, протокольные обработчики и прикладные сервисы так, чтобы сетевой callback не отвечал одновременно за конфигурацию и бизнес-логику.
my-app/ composer.json composer.lock server.php src/ Application/ Transport/ tests/server.php загружает Composer, читает конфигурацию, создаёт listeners и запускает Server::runAll. Transport адаптирует Request/сообщение к прикладному вызову. Application проверяет входные данные и выполняет сценарий. Внешние БД/HTTP-клиенты создаются в worker lifecycle, а не разделяют один унаследованный socket.
Зависимости внедряйте явно через конструктор/замыкание. Для состояния запроса используйте отдельные объекты; static registry оставляйте для конфигурации уровня процесса. Выделяйте протокол и обработчик отдельно: это позволяет тестировать framing без запуска всей прикладной системы.