Поддерживаемые функции

TrueAsync адаптирует 70+ стандартных PHP функций для неблокирующей работы в контексте корутин. Все перечисленные функции автоматически становятся асинхронными при вызове внутри корутины. Вне корутины они работают как обычно.


DNS

Функция Описание
gethostbyname() Разрешение имени хоста в IP-адрес
gethostbyaddr() Обратное разрешение IP-адреса в имя хоста
gethostbynamel() Получение списка IP-адресов для имени хоста

Базы данных

PDO MySQL

Функция Описание
PDO::__construct() Неблокирующее подключение
PDO::prepare() Подготовка запроса
PDO::exec() Выполнение запроса
PDOStatement::execute() Выполнение подготовленного запроса
PDOStatement::fetch() Получение результатов

PDO PgSQL

Функция Описание
PDO::__construct() Неблокирующее подключение
PDO::prepare() Подготовка запроса
PDO::exec() Выполнение запроса
PDOStatement::execute() Выполнение подготовленного запроса
PDOStatement::fetch() Получение результатов

PDO Connection Pooling

Прозрачный пул соединений для PDO через интеграцию с Async\Pool. Каждая корутина получает собственное соединение из пула с автоматическим управлением жизненным циклом.

MySQLi

Функция Описание
mysqli_connect() Неблокирующее подключение
mysqli_query() Выполнение запроса
mysqli_prepare() Подготовка запроса
mysqli_stmt_execute() Выполнение подготовленного запроса
mysqli_fetch_*() Получение результатов

PostgreSQL (нативный)

Функция Описание
pg_connect() Неблокирующее подключение
pg_query() Выполнение запроса
pg_prepare() Подготовка запроса
pg_execute() Выполнение подготовленного запроса
pg_fetch_*() Получение результатов

Каждый async-контекст использует отдельное соединение для безопасной конкурентности.


CURL

Функция Описание
curl_exec() Выполнение запроса
curl_multi_exec() Выполнение нескольких запросов
curl_multi_select() Ожидание активности
curl_multi_getcontent() Получение содержимого
curl_setopt() Установка параметров
curl_getinfo() Получение информации о запросе
curl_error() Получение ошибки
curl_close() Закрытие дескриптора

Сокеты

Функция Описание
socket_create() Создание сокета
socket_create_pair() Создание пары сокетов
socket_connect() Подключение
socket_accept() Принятие соединения
socket_read() Чтение данных
socket_write() Запись данных
socket_send() Отправка данных
socket_recv() Получение данных
socket_sendto() Отправка с адресом
socket_recvfrom() Получение с адресом
socket_bind() Привязка к адресу
socket_listen() Прослушивание
socket_select() Мониторинг активности сокетов

Файловый и потоковый ввод-вывод

Функция Описание
fopen() Открытие файла
fclose() Закрытие файла
fread() Чтение из файла
fwrite() Запись в файл
fgets() Чтение строки
fgetc() Чтение символа
fgetcsv() Чтение CSV-строки
fputcsv() Запись CSV-строки
fseek() Установка позиции
ftell() Получение позиции
rewind() Сброс позиции
ftruncate() Обрезка файла
fflush() Сброс буферов
fscanf() Форматированное чтение
file_get_contents() Чтение всего файла
file_put_contents() Запись всего файла
file() Чтение файла в массив
copy() Копирование файла
tmpfile() Создание временного файла
readfile() Вывод файла
fpassthru() Вывод остатка файла
stream_get_contents() Чтение остатка потока
stream_copy_to_stream() Копирование между потоками
flock() Блокировка файлов (через пул потоков)

Важно: flock() использует пул потоков. Функция flock() — блокирующий системный вызов, который невозможно сделать неблокирующим через I/O-события libuv. Внутри корутины блокирующие операции (LOCK_SH, LOCK_EX) выполняются в пуле потоков libuv, позволяя другим корутинам продолжать работу во время ожидания блокировки. Неблокирующие блокировки (LOCK_NB) и разблокировки (LOCK_UN) выполняются напрямую без пула потоков.

Важно: таймауты для файлов и pipe-потоков. PHP изначально не поддерживает таймауты для операций чтения/записи файлов и pipe-потоков — стандартные fread(), fwrite() и другие функции могут блокироваться бесконечно. TrueAsync решает эту проблему: если для потока установлен таймаут (через stream_set_timeout()), операция чтения регистрирует одновременно IO-событие и таймер. Если таймер срабатывает раньше завершения IO — чтение отменяется, и корутина получает результат -1 (признак таймаута). Это работает только внутри корутин — вне корутин поведение остаётся стандартным.


Потоковые сокеты

Функция Описание
stream_socket_client() Создание клиентского соединения
stream_socket_server() Создание серверного сокета
stream_socket_accept() Принятие соединения
stream_select() Мониторинг активности потоков
stream_context_create() Создание контекста с поддержкой async

Ограничение: stream_select() с pipe-потоками (например, от proc_open()) не поддерживается в Windows. На Linux/macOS работает через event loop.


Запуск процессов

Функция Описание
proc_open() Открытие процесса с pipe-каналами
proc_close() Закрытие процесса
exec() Выполнение внешней команды
shell_exec() Выполнение команды через оболочку
system() Выполнение системной команды
passthru() Выполнение с прямым выводом

Важно: proc_close() и pclose() блокируют корутину. Вызов proc_close() или pclose() ожидает завершения дочернего процесса. Внутри корутины это блокирует текущую корутину до выхода процесса — другие корутины продолжают работать. Это же происходит при неявном вызове через деструктор: если переменная с ресурсом процесса выходит из области видимости или уничтожается сборщиком мусора, деструктор вызывает pclose(), что блокирует корутину, в которой выполняется сборка мусора.

Рекомендация: всегда явно закрывайте процессы через proc_close(), не полагаясь на деструктор, чтобы контролировать, в какой корутине произойдёт блокировка.


Таймеры и задержки

Функция Описание
sleep() Задержка в секундах
usleep() Задержка в микросекундах
time_nanosleep() Задержка с наносекундной точностью
time_sleep_until() Ожидание до указанного времени

Буферизация вывода

Каждая корутина получает изолированный буфер вывода.

Функция Описание
ob_start() Начало буферизации
ob_flush() Сброс буфера
ob_clean() Очистка буфера
ob_get_contents() Получение содержимого буфера
ob_end_clean() Завершение буферизации

Ещё не поддерживается

Функции, которые планируются к реализации или пока не адаптированы.

DNS

Функция Описание
dns_check_record() / checkdnsrr() Проверка DNS-записи
dns_get_mx() / getmxrr() Получение MX-записей
dns_get_record() Получение DNS-записей произвольного типа

Базы данных

Расширение Описание
PDO ODBC Драйвер ODBC
PDO Oracle Драйвер Oracle
PDO SQLite Драйвер SQLite
PDO Firebird Драйвер Firebird
MongoDB Клиент MongoDB

Файловые операции (метаданные)

Функция Описание
opendir() / readdir() / closedir() Работа с каталогами
unlink() / rename() Удаление и переименование файлов
mkdir() / rmdir() Создание и удаление каталогов
stat() / lstat() Информация о файлах
readlink() Чтение символических ссылок

Примечание: Файловые операции с метаданными на локальном диске выполняются за микросекунды. Их асинхронность имеет смысл только при работе с сетевыми файловыми системами (NFS).


Дальше что?