Как асинхронно прочитать файл?

Здравствуйте пользователи habr.

Как известно в php много-поточность (threads) не очень хорошо развета, следовательно скрипт должен работать в одно-поточном режиме и любая долгая задача не должна останавливать его выполнение.

Я хочу иметь возможность одновременно решать 3 задачи:
  1. Принимать новые подключения к серверу.
  2. Отправлять запросы на стороние ресурсы.
  3. Читать файлы на диске.


Все выше перечисленные задачи не должны тормозить выполнение скрипта.
Для решения задачи я использовал бы stream.

Но моя проблема связана с чтением содержимого файла на диске.
Я гуглил асинхронное чтение файла с помошью php, и нашел вот такую функцию swoole, но ее проблема в том, что она ожидает завершения callback-функции.

Мне необходимо чтение файла, но скрипт должен лишь создать 'задачу' чтения файла и не ждать когда файл будет успешно прочитан. (Когда содержимое будет получено - должна запускаться callback функция, и по ее завершению вся использованная память должна уничтожаться).

Все 'задачи' передаю в функцию stream_select.

К сожалению примеров кода предоставить не могу, так как не имею понятия какую функцию вызывать для асинхронного чтения файла.

Примичание: возможно данная задача простая, и есть уже готовая функция асинхронного чтения используя stream, и я просто слепой.
  • Вопрос задан
  • 380 просмотров
Решения вопроса 1
zkrvndm
@zkrvndm
Архитектор решений
Создать задачу и пойти дальше выполнять код пока задача решается - это про промисы.

В php нет встроенных промисов, но их поддержку можно добавить самому вручную:
https://habr.com/ru/company/skyeng/blog/453296/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@galliard
Прям не блокируя поток выполнения при чтении файла стандартными средствами ты не сможешь, но можно просто читать файл небольшими кусочками, чтобы блокировать поток не на долго.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы