Я пытаюсь найти способ производить и отправлять данные в поток, только когда кто-то просит об этом. После n секунд с полностью заполненным буфером (настраиваемым) я бы хотел явно закрыть поток.
В противном случае происходит следующее:
- Я предоставляю конечную точку, которая отправляет поток данных 300Mb от Elasticsearch
- Я открываю соединение с этой конечной точкой, но я не читаю никаких данных
- Я создаю все свои данные потока на сервере, и эти данные буферизируются, но не отправлено.
- Я могу вызвать поток или еще что-нибудь, но память там уже некоторое время.
- Многие из них одновременно означают, что мой сервер отключается.
Здесь вы можете увидеть демонстрацию, где вы можете воспроизвести проблему
https://gist.github.com/mmoreram/ef71d05dd8aa507ced312e3391efd917
- composer update
- запустить сервер. Периодический таймер c будет выводить память процесса каждую секунду
- выполнять запрос. php файл. Он откроет соединение и будет находиться в режиме ожидания в течение 10 секунд
- . Вы увидите, что память сервера увеличивается до тех пор, пока соединение не будет закрыто из-за завершения сценария. В этот момент поток заканчивается и буфер удаляется. Память освобождена.