2015-12-01 4 views
1

Я знаю, что в /etc/php5/fpm/php.ini существует настройка, называемая default_socket_timeout, которая на практике завершает соединения, у которых не было ответа, надавленного на них в течение определенного количества времени. Я запускаю «прослушиватель» AJAX на основе RabbitMQ, который открывает соединение и ждет, пока он не получит ответ, если вообще будет, а затем перезапустится.Установите значение default_socket_timeout в бесконечность?

Проблема в том, что она может не получить ответ в течение длительного времени - иногда даже до 2 часов. Когда это случается, слушатель умирает, потому что он получил 504 Gateway Timeout. Я знаю среднюю нагрузку - это внутренняя система, доступная только для определенного офиса - так много сокетов не будет проблемой. Есть ли способ установить default_socket_timeout на "без ограничений"? Я попробовал default_socket_timeout=0, но это только возвращает его к умолчанию 60 секунд.

+0

Вы пробовали '-1'? Если это не сработает, вы также можете установить его на '(1 << 31) -1' (2147483647) на время около 68 лет. Кстати, я читал здесь [fsockopen] (http://php.net/manual/en/function.fsockopen.php), что 'default_socket_timeout' применяется только к установлению соединений; для тайм-аутов чтения/записи предлагается использовать [stream_set_timeout] (http://php.net/manual/en/function.stream-set-timeout.php) – Kenney

+0

@ Kenney Спасибо, я обнаружил, что этот параметр не имеет отношения к моему вопрос вообще, см. мой ответ. Спасибо, в любом случае! –

+1

Ах, ты понял, отлично! – Kenney

ответ

1

Оказалось, что мой вопрос Gateway Timeout не был связан с default_socket_timeout. Я закончил тем, что разместил fastcgi_read_timeout 3000; в моем блоке размещения PHP nginx, и он решил проблему. Вот как мой конфиг:

location ~ \.php$ { 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/var/run/php5-fpm.sock; 
    fastcgi_index index.php; 
    include fastcgi_params; 
    fastcgi_read_timeout 3000; 
} 

Это позволяет мне иметь длинный запрос, который не отключается через 60 секунд.

3

Для полноты картины:

default_socket_timeout=-1 

отключает тайм-аут ....

Смежные вопросы