Funcții stream_socket fac parte din cursuri de apă și utilizarea lor, putem stabili conexiuni și de a scrie / citi date, fără a aștepta pentru operația anterioară.
În continuare, vom aplica funcția într-o buclă de deschidere stream_socket_client pentru fiecare soclu adresă URL. STREAM_CLIENT_ASYNC_CONNECT pavilion indică faptul că următorul compus necesar pentru a deschide asincronă (fără a aștepta finalizarea descoperirilor anterioare) și este nevoie de pavilion STREAM_CLIENT_CONNECT pentru a crea o conexiune client. În matrice $ write_tasks salvate descriptori soclu.
Apoi, în principal matrice buclă $ read_tasks_ și $ write_tasks_, care sunt transmise funcțiile stream_select sunt atribuite matrice care stochează prize pentru citire și scriere. Funcția stream_select monitorizează fluxul de date existente, și ia următorii parametri:- O serie de descriptori, de așteptare pentru finalizarea operației de citire;
- Array tag-uri care așteaptă finalizarea operațiunii de scriere;
- Pentru datele situația continuă de-a-band - "date out-of-band";
- Timeout.
În continuare, suntem în căutarea pentru ceea ce prize sunt disponibile pentru înregistrarea datelor. Dacă aveți nevoie de altceva pentru a trimite răspunsul final - Șterge descriptorul curent de matrice pentru a înregistra și scrie-l la matrice pentru citire. Apoi, trimite necesare http-antetele pentru conținut.
Mai mult, în foreach prizele cu aspect de buclă disponibile pentru citire, păstrați conținutul în rândul de rezultat $, scoateți mânerul din matrice pentru citirea și închideți priza. Conținutul $ rezultatul șir de caractere este salvat în matrice $ rezultate. Realizăm aceste operații până când nu avem prize deschise.
După executarea script-ul primit de conținut este situat în matrice $ rezultate.
Deci, am considerat soluția la problema noastră cu funcțiile de aplicare stream_socket în articolul următor ia în considerare socket-uri asincrone pentru a emula multi-threading în PHP.