Что происходит, когда сервер находится в бесконечном цикле и клиент останавливается?

Я пытаюсь понять, как делается «разговор» между сервером и клиентом.

Итак, когда сервер генерирует бесконечный цикл, например, "hello<br />" , что происходит, когда клиент останавливается или обращается «назад»?

Как сервер знает, что это конец цикла, или он берет на себя бесконечный процесс?

Есть ли где-нибудь, что я могу прочитать об этом, чтобы получить общую картину?

Клиент имеет сеанс TCP / IP, установленный на вашем сервере, ожидая ответа HTTP вашего сайта. Когда клиент (пользователь) обращается назад / отменяет / закрывает, это TCP-соединение немедленно закрывается.

Веб-сервер (т.е. apache) будет информировать интерпретатора PHP о соединении TCP .

Если директиве php.ini ignore_user_abort значение 1 (на стороне сервера 0 – по умолчанию PHP), интерпретатор PHP прекратит выполнение скрипта, когда закончится текущая атомная операция (в вашем примере: echo() )

Однако, даже если вы установите ignore_user_abort явно на 1 вы попадете в PHP max_execution_time или apache TimeOut (оба они также настраиваются на стороне сервера)

также см. ignore_user_abort() и set_time_limit()

Даже если ваш php-скрипт имеет бесконечный цикл, php.ini имеет max_execution_time которое убьет процесс, если время превысит.

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

Если вы set_time_limit(0); в сценарии (поэтому интерпретатор PHP позволяет ему работать вечно), тогда скрипт, вероятно, будет работать до тех пор, пока веб-сервер не убьет его после того, как будет установлена ​​переменная TimeOut (по умолчанию мне кажется, что 300 секунд, и, насколько я знаю, только настройка Apache).

См . Документы Apache для директивы TimeOut .