Funzioni supportate

TrueAsync adatta oltre 70 funzioni PHP standard per il funzionamento non-bloccante all'interno delle coroutine. Tutte le funzioni elencate diventano automaticamente asincrone quando vengono chiamate all'interno di una coroutine. Al di fuori di una coroutine, funzionano normalmente.


DNS

FunzioneDescrizione
gethostbyname()Risolvere nome host in indirizzo IP
gethostbyaddr()Risoluzione inversa dell'indirizzo IP in nome host
gethostbynamel()Ottenere l'elenco degli indirizzi IP per un nome host

Database

PDO MySQL

FunzioneDescrizione
PDO::__construct()Connessione non-bloccante
PDO::prepare()Preparare query
PDO::exec()Eseguire query
PDOStatement::execute()Eseguire query preparata
PDOStatement::fetch()Recuperare risultati

PDO PgSQL

FunzioneDescrizione
PDO::__construct()Connessione non-bloccante
PDO::prepare()Preparare query
PDO::exec()Eseguire query
PDOStatement::execute()Eseguire query preparata
PDOStatement::fetch()Recuperare risultati

Pool di connessioni PDO

Pool di connessioni trasparente per PDO tramite integrazione con Async\Pool. Ogni coroutine riceve la propria connessione dal pool con gestione automatica del ciclo di vita.

MySQLi

FunzioneDescrizione
mysqli_connect()Connessione non-bloccante
mysqli_query()Eseguire query
mysqli_prepare()Preparare query
mysqli_stmt_execute()Eseguire query preparata
mysqli_fetch_*()Recuperare risultati

PostgreSQL (nativo)

FunzioneDescrizione
pg_connect()Connessione non-bloccante
pg_query()Eseguire query
pg_prepare()Preparare query
pg_execute()Eseguire query preparata
pg_fetch_*()Recuperare risultati

Ogni contesto async utilizza una connessione separata per una concorrenza sicura.


CURL

FunzioneDescrizione
curl_exec()Eseguire richiesta
curl_multi_exec()Eseguire più richieste
curl_multi_select()Attendere attività
curl_multi_getcontent()Ottenere contenuto
curl_setopt()Impostare opzioni
curl_getinfo()Ottenere info richiesta
curl_error()Ottenere errore
curl_close()Chiudere handle

Socket

FunzioneDescrizione
socket_create()Creare socket
socket_create_pair()Creare coppia di socket
socket_connect()Connettere
socket_accept()Accettare connessione
socket_read()Leggere dati
socket_write()Scrivere dati
socket_send()Inviare dati
socket_recv()Ricevere dati
socket_sendto()Inviare a indirizzo
socket_recvfrom()Ricevere da indirizzo
socket_bind()Associare a indirizzo
socket_listen()Ascoltare
socket_select()Monitorare attività socket

I/O file e flussi

FunzioneDescrizione
fopen()Aprire file
fclose()Chiudere file
fread()Leggere da file
fwrite()Scrivere su file
fgets()Leggere riga
fgetc()Leggere carattere
fgetcsv()Leggere riga CSV
fputcsv()Scrivere riga CSV
fseek()Impostare posizione
ftell()Ottenere posizione
rewind()Reimpostare posizione
ftruncate()Troncare file
fflush()Svuotare buffer
fscanf()Lettura formattata
file_get_contents()Leggere file intero
file_put_contents()Scrivere file intero
file()Leggere file in array
copy()Copiare file
tmpfile()Creare file temporaneo
readfile()Mostrare file
fpassthru()Mostrare resto del file
stream_get_contents()Leggere resto del flusso
stream_copy_to_stream()Copiare tra flussi
flock()Blocco file (tramite pool di thread)

Importante: flock() utilizza il pool di thread. La funzione flock() è una chiamata di sistema bloccante che non può essere resa non-bloccante tramite eventi I/O di libuv. Dentro una coroutine, le operazioni di blocco (LOCK_SH, LOCK_EX) vengono scaricate al pool di thread libuv, permettendo alle altre coroutine di continuare l'esecuzione durante l'attesa del blocco. I blocchi non-bloccanti (LOCK_NB) e gli sblocchi (LOCK_UN) vengono eseguiti direttamente senza il pool di thread.

Importante: Timeout per file e flussi pipe. PHP non supporta nativamente i timeout per le operazioni di lettura/scrittura su file e flussi pipe — le funzioni standard fread(), fwrite() e altre possono bloccarsi indefinitamente. TrueAsync risolve questo problema: se per un flusso è impostato un timeout (tramite stream_set_timeout()), l'operazione di lettura registra contemporaneamente un evento IO e un timer. Se il timer scatta prima del completamento dell'IO, la lettura viene annullata e la coroutine riceve un risultato di -1 (indicatore di timeout). Questo funziona solo all'interno delle coroutine — al di fuori, il comportamento rimane standard.


Socket di flusso

FunzioneDescrizione
stream_socket_client()Creare connessione client
stream_socket_server()Creare socket server
stream_socket_accept()Accettare connessione
stream_select()Monitorare attività dei flussi
stream_context_create()Creare contesto async

Limitazione: stream_select() con flussi pipe (es. da proc_open()) non è supportato su Windows. Su Linux/macOS funziona nativamente tramite il ciclo di eventi.


Esecuzione di processi

FunzioneDescrizione
proc_open()Aprire processo con pipe
proc_close()Chiudere processo
exec()Eseguire comando esterno
shell_exec()Eseguire comando shell
system()Eseguire comando di sistema
passthru()Eseguire con output diretto

Importante: proc_close() e pclose() bloccano la coroutine. La chiamata a proc_close() o pclose() attende la terminazione del processo figlio. All'interno di una coroutine, questo blocca la coroutine corrente fino all'uscita del processo — le altre coroutine continuano a funzionare. Lo stesso accade con le chiamate implicite tramite i distruttori: se una variabile con una risorsa di processo esce dallo scope o viene distrutta dal garbage collector, il distruttore chiama pclose(), che blocca la coroutine in cui è in esecuzione la garbage collection.

Raccomandazione: chiudete sempre i processi esplicitamente tramite proc_close() anziché affidarvi ai distruttori, per controllare quale coroutine verrà bloccata.


Timer e ritardi

FunzioneDescrizione
sleep()Ritardo in secondi
usleep()Ritardo in microsecondi
time_nanosleep()Ritardo con precisione al nanosecondo
time_sleep_until()Attendere fino al timestamp

Buffer di output

Ogni coroutine riceve un buffer di output isolato.

FunzioneDescrizione
ob_start()Avviare il buffering
ob_flush()Svuotare il buffer
ob_clean()Pulire il buffer
ob_get_contents()Ottenere il contenuto del buffer
ob_end_clean()Terminare il buffering

Non ancora supportato

Funzioni pianificate per l'implementazione o non ancora adattate.

DNS

FunzioneDescrizione
dns_check_record() / checkdnsrr()Verificare record DNS
dns_get_mx() / getmxrr()Ottenere record MX
dns_get_record()Ottenere record DNS

Database

EstensioneDescrizione
PDO ODBCDriver ODBC
PDO OracleDriver Oracle
PDO SQLiteDriver SQLite
PDO FirebirdDriver Firebird
MongoDBClient MongoDB

Operazioni su file (metadati)

FunzioneDescrizione
opendir() / readdir() / closedir()Attraversamento directory
unlink() / rename()Eliminazione e rinomina file
mkdir() / rmdir()Creazione e rimozione directory
stat() / lstat()Informazioni sui file
readlink()Lettura dei link simbolici

Nota: Le operazioni sui metadati dei file su disco locale si completano in microsecondi. La loro asincronia ha senso solo per i file system di rete (NFS).


E poi?