Многократный процесс для пользователя

Я смотрю, как разрешить запуск нескольких процессов для одного пользователя в symfony. У меня такое поведение в Symfony / Nginx / Php FPM но я тестирую на чистом веб-сервере symfony и php:

composer create-project symfony/website-skeleton my-project

это конфигурация докера:

version: "3.1"
services:
    webserver:
      image: nginx:alpine
      container_name: viz-webserver
      working_dir: /application
      volumes:
          - .:/application
          - ./docker/nginx/nginx_all.conf:/etc/nginx/nginx.conf
      networks:
           itb_net:
             ipv4_address: 10.2.0.6

    php-fpm:
      build: itb_docker/php-fpm
      container_name: php-fpm
      working_dir: /application
      networks:
        itb_net:
          ipv4_address: 10.2.0.8
      volumes:
      - ~/.ssh/:/root/.ssh/
      - .:/application
      - ./docker/php-fpm/php-ini-overrides.ini:/etc/php/7.2/fpm/conf.d/99-overrides.ini
      - ./.aws/credentials:/var/www/.aws/credentials

php-ini-overrides.ini

upload_max_filesize = 200M
post_max_size = 208M
memory_limit =  4048M

php-fpm файл Dockerfile

FROM phpdockerio/php72-fpm:latest
WORKDIR "/application"

# Fix debconf warnings upon build
ARG DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
    && apt-get -y --no-install-recommends install php-zip php-xdebug php-gd php-xml php7.2-mysql php7.2-intl php7.2-tidy php7.2-xmlrpc php7.2-soap php7.2-bcmath php-mbstring php-curl\
    && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*



# Install git
RUN apt-get update \
    && apt-get -y install git acl wkhtmltopdf xvfb \
    && apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*

nginx

user nginx;
worker_processes  2;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /dev/stdout  main;

    #sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;


 server {


   #  limit_conn conn_limit_per_ip 10;

   #  limit_req zone=req_limit_per_ip burst=10 nodelay;

    fastcgi_keep_conn on;
    #proxy_buffering off;
    gzip off;

     listen 80 default;

     client_max_body_size 208M;

     access_log /var/log/nginx/application.access.log;

     root /application/public;

     rewrite ^/index\.php/?(.*)$ /$1 permanent;

     try_files $uri @rewriteapp;

     location @rewriteapp {
         rewrite ^(.*)$ /index.php/$1 last;
     }

     # Deny all . files
     location ~ /\. {
         deny all;
     }

     location ~ ^/(index)\.php(/|$) {
         fastcgi_pass php-fpm:9000;
         fastcgi_split_path_info ^(.+\.php)(/.*)$;
         fastcgi_index app_dev.php;
         send_timeout 1800;
         fastcgi_read_timeout 1800;
         fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
         fastcgi_param PHP_VALUE "error_log=/var/log/nginx/application_php_errors.log";
         fastcgi_buffers 16 16k;
         fastcgi_buffer_size 32k;
         include fastcgi_params;
     }

     # Statics
         location /(bundles|media) {
         access_log off;
         expires 30d;
         try_files $uri @rewriteapp;
     }}

}

Контроллер тестирования:

class TestController extends Controller
{

    /**
     * @Route("/test1")
     */
    public function aAction(){

        $i = 0;
        while($i<50){

            echo "$i<BR>";
            $i++;
            sleep(2);

        }
    }

    /**
     * @Route("/test2")
     */
    public function bAction(){

        return new Response('OK');
    }

}

и тот же результат - перейдите в / test1 и test2 во второй вкладке = вторая вкладка дождитесь первого завершения.

Объясните, почему вы упоминаете PHP-FPM (который может одновременно обслуживать страницы для нескольких пользователей, например, Apache и т. д.), Но запускаете сервер из командной строки.

A.L 25.09.2018 10:55

Какая конфигурация пула fpm в этом образе докера? Ограничивается ли он одним работником?

Peter Mellett 25.09.2018 11:29

Я удалил пример из командной строки - это была ошибка. вот аналогичная проблема -digitalocean.com/community/questions/…, но не вижу решения.

Developer 25.09.2018 12:20

Согласно этой ссылке сервер принимал только очень ограниченное количество одновременных запросов, похоже, это то, что происходит с вами. Что произойдет, если вы увеличите количество worker_processes в конфигурации ngix?

Peter Mellett 25.09.2018 13:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
109
1

Ответы 1

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

Согласно http://php.net/manual/en/features.commandline.webserver.php

The web server runs a only one single-threaded process, so PHP applications will stall if a request is blocked.

хорошо, я удаляю пример, используя встроенный PHP - мне нужно запустить более одного процесса в NGINX / PHP-FPM-Symfony

Developer 25.09.2018 12:15

Другие вопросы по теме