Emulare de multi-threading în PHP, utilizați flux-funcție

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:
  1. O serie de descriptori, de așteptare pentru finalizarea operației de citire;
  2. Array tag-uri care așteaptă finalizarea operațiunii de scriere;
  3. Pentru datele situația continuă de-a-band - "date out-of-band";
  4. Timeout.
Matricele de indicii sunt trimise la funcția, și după revenirea în funcție de numărul> 0, acestea vor fi salvate, prize gata pentru manipulare ulterioară.

Î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.