Attualmente ho un demone server scritto in PHP che accetta le connessioni in entrata e crea flussi di rete per loro utilizzando le funzioni stream_socket_*
e esegue il polling dei flussi attivi utilizzando stream_select()
. Mi piacerebbe essere in grado di aggiungere un filtro zlib (usando string_filter_append()
) a uno stream arbitrario, ma quando lo faccio, viene visualizzato un errore che mi informa che non è possibile utilizzare stream_select()
per eseguire il polling di un flusso filtrato.Come faccio a usare stream_select() di PHP con un filtro zlib?
Come posso aggirare questa limitazione?
Grazie, questo metodo sembra consentirmi di aggirare la limitazione, tuttavia sto usando "zlib.deflate" e non sto copiando stream-to-stream, ma piuttosto, usando solo fwrite() per inviare server dati generati attraverso i flussi di rete in uscita. Usando questo metodo, stream_get_contents ($ out) restituisce l'intestazione zlib a 2 byte e nient'altro. Se scrivo gli stessi dati su un file, piuttosto che scrivere su $ in e leggere $ out, i dati $ compressi sono scritti completamente. C'è qualcosa in questo metodo che impedirebbe di leggere i dati compressi completi da $ out? – drrcknlsn
Il filtro può scrivere sul flusso solo dopo aver scritto una certa quantità di dati; prova a scrivere più dati. Prova anche con il filtro zlib.deflate sul lato scrittura con STREAM_FILTER_WRITE VS sul lato di lettura con STREAM_FILTER_READ. – arnaud576875