Victor Sudakov
April 16, 2021 03:28AM
Evgeniy Berdnikov wrote:
> On Fri, Apr 16, 2021 at 12:54:21PM +0700, Victor Sudakov wrote:
> > А если php-скрипт ничего не возвращает клиенту, а делает sleep(100500)
> > внутри себя, и при этом nginx закрывает соединение со скриптом,
> > connection-status в скрипте не перейдет в состояние ABORTED?
>
> В скрипте (пользовательском процессе с php) не существует connection-status.

А в https://www.php.net/manual/en/features.connection-handling.php
написано что существует.

> Статус коннекции есть в ядре, и для закрытой с одной стороны коннекции
> он будет "half closed", т.е. на стороне получателя FINa перейдёт в
> состояние CLOSE_WAIT. Смотрите диаграмму состояний TCP в RFC 793.

Это в данном случае не важно. Я говорю о connection status, который
доступен в PHP, на уровне приложения, по ссылке выше.

>
> > Предположим что nginx закрывает TCP-соединение с апстримом штатно (FIN
> > -> FIN+ACK -> ACK). Или оно вообще было через Unix-socket. Таки
> > connection-status в скрипте всё равно останется NORMAL до попытки
> > вернуть клиенту какие-то данные?
>
> Повторю: состояние коннекции находится в ядре. Есть интерфейс общения
> процесса и ядра. Если процесс попытается написать в сокет, для которого
> другая сторона закрыла коннекцию, то ему ядро вернёт ECONNRESET.

Понятно что php откуда-то узнаёт информацию о состоянии соединения, но с
точки зрения php

there are 4 possible states:

0 - NORMAL
1 - ABORTED
2 - TIMEOUT
3 - ABORTED and TIMEOUT

When a PHP script is running normally, the NORMAL state is active. If
the remote client disconnects, the ABORTED state flag is turned on. A
remote client disconnect is usually caused by users hitting their STOP
button.

Вот PHP эти состояния переключает на основе какой-то информации, скорее
всего действительно от ядра. Когда состояние становится ABORTED, скрипт
должен по идее завершиться.

В документации написано, что когда "remote user hits his STOP button,
the next time your script tries to output something PHP will detect that
the connection has been aborted and the shutdown function is called."

Из этого можно заключить, что если не пытаться что-то из скрипта
выводить, то ABORTED никогда не наступит. Это верное утверждение?

> Для мониторинга состояния коннекции есть poll/epoll/kqueue/etc, как уже
> писали в этом треде. Но делать такой мониторинг непросто: нужно ловить
> событие "коннекция закрыта с той стороны" и писать его обработчик,

Диаграмма состояний TCP и прочие его тонкости в контексте данной
беседы без надобности. Можно вообще оговорить, что FastCGI через
Unix socket работает, суть вопроса не изменится.

> возможно искать способы безопасного прерывания кода, работающего 3 часа.

Для этого уже предусмотрели shutdown function, насколько я понимаю.

Вопрос не в этом, а в реакции php-fpm на нажатие пользователем кнопки
Стоп в браузере - в какой момент это нажатие отразится в состояние
ABORTED в скрипте?

--
Victor Sudakov VAS4-RIPE
http://vas.tomsk.ru/
2:5005/49@fidonet
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 13, 2021 01:12AM

Re: Тонкости работы FastCGI (phpfpm)

greenh April 13, 2021 03:04AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 13, 2021 03:48AM

Re: Тонкости работы FastCGI (phpfpm)

Slawa Olhovchenkov April 13, 2021 08:08AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 14, 2021 01:52AM

Re: Тонкости работы FastCGI (phpfpm)

Aleksandr Sytar April 13, 2021 03:06AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 13, 2021 03:52AM

Re: Тонкости работы FastCGI (phpfpm)

greenh April 13, 2021 06:02AM

Re: Тонкости работы FastCGI (phpfpm)

greenh April 13, 2021 06:04AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 13, 2021 06:20AM

Re: Тонкости работы FastCGI (phpfpm)

greenh April 13, 2021 06:26AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 13, 2021 06:32AM

Re: Тонкости работы FastCGI (phpfpm)

greenh April 13, 2021 06:42AM

Re: Тонкости работы FastCGI (phpfpm)

Eugene Grosbein April 13, 2021 07:20AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 13, 2021 06:30AM

Re: Тонкости работы FastCGI (phpfpm)

greenh April 13, 2021 06:40AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 15, 2021 01:04AM

Re: Тонкости работы FastCGI (phpfpm)

Maxim Dounin April 13, 2021 09:42AM

Re: Тонкости работы FastCGI (phpfpm)

VovansystemS April 13, 2021 10:04AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 15, 2021 01:04AM

Re: Тонкости работы FastCGI (phpfpm)

Maxim Dounin April 15, 2021 10:22AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 16, 2021 01:56AM

Re: Тонкости работы FastCGI (phpfpm)

Evgeniy Berdnikov April 16, 2021 02:34AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 16, 2021 03:28AM

Re: Тонкости работы FastCGI (phpfpm)

Evgeniy Berdnikov April 16, 2021 04:40AM

Re: Тонкости работы FastCGI (phpfpm)

Maxim Dounin April 16, 2021 10:56AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 21, 2021 04:00AM

Re: Тонкости работы FastCGI (phpfpm)

Evgeniy Berdnikov April 21, 2021 05:08AM

Re: Тонкости работы FastCGI (phpfpm)

Victor Sudakov April 22, 2021 12:24AM

Re: Тонкости работы FastCGI (phpfpm)

Slawa Olhovchenkov April 21, 2021 06:46AM

Re: Тонкости работы FastCGI (phpfpm)

Eugene Grosbein April 21, 2021 08:16AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 110
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready