Поддерживаемые функции
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).
Дальше что?