Подтвердить что ты не робот

Написание PHP-блокирующих приложений

Я хочу писать неблокирующие приложения. Я использую apache2, но я читал о nginx и его преимуществах в отношении процессов apache. Я рассматриваю возможность изменения apache для nginx. Мой вопрос в том, можно ли писать неблокирующие веб-приложения с php и nginx?.

Или лучше попытаться сделать это с помощью python, используя какой-то обратный прокси, например uwsgi или gunicorn с nginx? Или это решение для изучения nodejs?

4b9b3361

Ответ 1

Написание неблокирующих приложений в php возможно, но это, вероятно, не лучшая среда для этого, поскольку она не была создана, учитывая это! Вы получаете довольно приличный контроль над дочерними процессами, используя библиотеку управления процессами PCNTL, но она, очевидно, никогда не предложит вам такую ​​же легкость использования что другие среды могут дать вам!

Я не очень хорошо знаю python, но лично я бы рекомендовал вам пойти с nodejs! Это довольно новая технология, это правда, но все там не блокируется, и это должно быть так! В основном то, что у вас есть, это один поток (который вы можете расширить, но вы хотите в этих новостных версиях), и буквально все (за исключением того, что вы говорите, что нужно делать по-другому) будет управляться событиями, оставляя пространство для продолжения в очереди процессов, как ожидается!

Nodejs действительно легко учиться, если вы когда-либо наткнулись на веб-приложения, вы знаете, что javascript в любом случае! он все еще не документирован, но есть много готовых к использованию модулей, которые вы можете скачать и использовать прямо сейчас!

Ответ 2

Насколько я знаю, для создания неблокирующих приложений доступно несколько библиотек.

BTW: Я автор Skyray и один из разработчиков swoole.

Ответ 3

Swoole является хорошим выбором для написания неблокирующего php-приложения

вот пример:

$fp = stream_socket_client("tcp://127.0.0.1:80", $code, $msg, 3);
$http_request = "GET /index.html HTTP/1.1\r\n\r\n";
fwrite($fp, $http_request);
swoole_event_add($fp, function($fp){
    echo fread($fp, 8192);
    swoole_event_del($fp);
    fclose($fp);
});
swoole_timer_after(2000, function() {
    echo "2000ms timeout\n";
});
swoole_timer_tick(1000, function() {
    echo "1000ms interval\n";
});

Ответ 4

Я еще не смотрел на pushpin, но я пишу этот ответ, чтобы указать на другую структуру, которая поддерживает неблокирующие приложения в PHP:

Реагировать http://reactphp.org/

Он поддерживает привязку сервера к HTTP или WebSocket и может использоваться с сетевым программным обеспечением, таким как Nginx, путем пересылки (с использованием proxy_pass) запросов на него через HTTP. Вы даже можете использовать HTTPS на веб-сервере и пересылать его без шифрования. (Поддержка SSL в React отсутствует.)

Пока не существует поддержки FastCGI или UWSGI, по крайней мере, не в проекте upstream.

Стиль похож на запись node.js, вы добавляете блокировки PHP 5.3+ к событиям и прозрачно используете незаблокированные сокеты под ним. На этом веб-сайте есть хорошие примеры, поэтому я не буду повторять их здесь, так как вы не запрашивали конкретный вариант использования.

ОБНОВЛЕНО: я просто посмотрел на веб-сайт pushpin, и это не инфраструктура или инструмент для написания неблокирующих PHP-приложений по запросу в заголовке вопроса. Кажется, что это было бы полезно как часть решения.

Ответ 5

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

Если вы хотите использовать node, убедитесь, что это правильный инструмент для задания. Проверьте проблемы, потому что на этот вопрос уже есть ответы. Спросите себя, если ваша идея приложения вписывается в возможности node. Попробуйте Почему и когда использовать node js? и Как решить, когда использовать NodeJS?.