Принудительное подключение закрыть lighttpd - PullRequest
0 голосов
/ 02 апреля 2020

Мне нужно некоторое время запускать код в фоновом режиме после отправки вывода клиенту.
Но соединение блокируется и не закрывается, пока работа не будет завершена.

Посмотрел:
Как мне закрыть соединение раньше?
https://www.php.net/manual/en/features.connection-handling.php#71172
(и другие связанные ответы)

Я получил код:

Я пробовал оба:
server.max-keep-alive-idle = 0
server.max-keep-alive-запросы = 0
Взято из:

lighttpd принудительно закрыть соединение
https://serverfault.com/questions/283377/force-connection-close-lighttpd
(положить внутрь /etc/lighttpd/lighttpd.conf)

Моя настройка:
lighttpd / 1.4.53
php / 7.1.3
Firefox 68.6.0esr (32-разрядная версия)
Raspberry Pi 4
Raspbian
uname -a: Linux raspberrypi 4.19.97-v7l + # 1294 SMP Чт 30 января 13:21:14 GMT 2020 armv7l GNU / Linux

Включенные модули lighttpd:
10-accesslog.conf
10-fastcgi.conf
10-переписать. conf
15-fastcgi- php .conf
90- javascript -alias.conf

Назначение :
Это простой код игры MUD.
Он должен обновлять sh AIs раз в секунду .
Периодически он начинается с присутствия игрока в игре, например:

1] Скрипт обработает команду игрока,
затем соединение должно быть закрыто, чтобы не беспокоить браузер игрока
2] проверить файл блокировки, а если он свободен - заблокировать его
3], затем остаться в фоновом режиме для 10 обновлений
После этого файл разблокируется,
, чтобы команда другого игрока могла запустить другое задание bg

1 Ответ

0 голосов
/ 03 апреля 2020

Если ваш код должен выполнить обработку после отправки ответа CGI, тогда ваш код должен сделать это в отдельном контексте выполнения, поскольку CGI выполнил свою работу когда он отправляет ответ CGI, и lighttpd затем отправляет сигнал SIGTERM вашему сценарию.

Один из способов запустить код после отправки ответа CGI - это запустить код в фоновом режиме после отправки ответа CGI. См. https://www.php.net/manual/en/function.posix-setsid.php

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...