производительность — Как обрабатывать несколько запросов, используя один и тот же экземпляр PHP работает?

Как мы знаем, PHP работает в философии «ничего не поделись».
Это связано с серьезными ограничениями производительности.

В то время как скомпилированный скрипт может быть ускорен некоторыми расширениями кэширования, мы не можем избежать очень тяжелой инициализации (например, у нас есть веб-служба, и каждый вызов по крайней мере потребует синтаксического анализа и начальной загрузки схем DTO, настройки привязки данных, подключения базы данных (постоянный mysql). соединения — это действительно грязный хак с этой точки зрения), открытие других удаленных служб и так далее).

Также эта проблема, кажется, решается с помощью инфраструктуры ReactPHP, но … существуют ли какие-либо легкие неструктурные решения? Все, что угодно — от хакерских способов, примеров из одного файла до облегченных библиотек (не фреймворков).
Не требуется сложный воссозданный функционал веб-сервера. Достаточно просто обработать простые запросы POST.

<offtopic>

Сама задача настолько важна, что я удивляюсь, почему PHP пока не предоставляет этого готового решения …

</offtopic>

0

Решение

Один из лучших способов сделать это — иметь скрипт CLI, который будет работать как ваш обычный сервер Java / nodeJS. И используйте легкий шлюз PHP для получения HTTP-запросов и получения необходимой информации от CLI через сокет.

Интересное чтение http://liveforeverbook.info/blog/2008/01/31/persistent-web-apps-in-php/

Ключом к этому является то, что скрипт CLI хранит хранилище сообщений
в памяти (как сервис Java) и связывается с клиентом
через веб-интерфейс PHP «шлюз».

IRC сервер <-> PHP Gateway <-> Клиент Шаг шлюза не
на самом деле требуется, но помогает отфильтровать мусор, который может прийти
через, если IRC-сервер был подключен напрямую к сети.

Вы запускаете сервер IRC, работающий как скрипт из консоли (php
server.php) и оставьте его работающим. У скриптов CLI нет времени ожидания, поэтому
будет работать до тех пор, пока вы не выключите его вручную.

1

Другие решения

Существуют ли легкие некаркасные решения? Все, что угодно — от хакерских способов, примеров из одного файла до облегченных библиотек (не фреймворков).

Зависит от того, что вы ищете. Вам понадобится какой-то цикл событий / планировщик, который в основном то, что amphp/amp / react/event-loop предоставлять. Если вы не хотите умирать в аду обратного вызова, вам потребуется некоторая форма реализации обещаний, предоставляемая amphp/amp / react/promise.

Если вы видите эти части как основу и не хотите их использовать, вы, конечно, можете написать их самостоятельно. Но опять же, вы ищете стабильное программное обеспечение, любое из которых будет более стабильным, чем ваша собственная реализация, потому что они гораздо более широко используются, а ошибки сообщаются и исправляются.

Все, что находится на вершине этих основ, — просто библиотеки. Вы можете использовать их или написать свой собственный. Если вам просто нужен сокет-сервер, почему бы не использовать библиотеки, которые уже имеют дело с крайними случаями PHP, насколько это возможно?

Не требуется сложный воссозданный функционал веб-сервера. Достаточно просто обработать простые запросы POST.

О, что за сложный веб-сервер? «Просто» обработка простых POST-запросов? Вам понадобится парсер протокола HTTP, который правильно обрабатывает конвейерные запросы, декодирует кусочную кодировку, многокомпонентный парсер, если вы хотите работать с загруженными файлами и т. Д.

Если вы просто хотите обрабатывать несколько запросов в одном процессе PHP без повторной загрузки, я бы посоветовал взглянуть на PHP-PM, но на данный момент он не готов к производству.

1

По вопросам рекламы [email protected]