Ionut Stoica

Programator PHP / Frontend developer / Pasionat de Electronica Auto
9Apr

Crearea unui Daemon in PHP – Partea 1

In cadrul acestui articol voi descrie modul in care putem crea un Daemon (“server“) ce asculta pe un anumit ip+port si poate executa unele actiuni.

Aceste actiuni pot fi orice. De la o conectare la un server (verificare stare server/afisare dimensiune pagina remote, etc.) la un sistem de chat sau un server de stream (intr-un articol viitor voi descrie modul in care putem crea un server de streaming).

[ad]

Incepem cu inceputul, vom folosi in acest tutorial cateva functii principale din PHP referitoare la socket-uri:

  1. socket_create
  2. socket_bind
  3. socket_listen
  4. socket_accept
  5. socket_read
  6. socket_close

1. Socket Create:

socket_create – Creeaza un socket (o cale de comunicare intre 2 puncte).
Mod de utilizare:

$socket = socket_create( domeniutipprotocol );

Unde:
domeniu poate avea valorile urmatoare:

  • AF_INET - Protocol bazat pe IPv4, atat UDP cat si TCP;
  • AF_INET6 - Protocol bazat pe IPv6, atat UDP cat si TCP;
  • AF_UNIX - Protocol pentru comunicare locala;

tip-ul poate avea una dintre urmatoarele valori:

  • SOCK_STREAM - Pe acest tip de socket este bazat protocolul TCP;
  • SOCK_DGRAM - Pe acest tip de socket este bazat protocolul UDP;
  • SOCK_SEQPACKET - Este un tip special de socket, un protocol in 2 directii ce necesita citirea completa a informatiilor de catre client pentru a se putea efectua o noua transmisie (Foarte rar folosit);
  • SOCK_RAW - Acest tip de socket este un socket brut, cu ajutorul caruia se poate construi orice tip de protocol (ex: YMSG, ICMP);
  • SOCK_RDM - Un tip de socket implementat foarte rar in sistemele de operare.

protocol-ul. Avem 3 tipuri principale de protocol ce pot fi folosite (in tutorial vom folosi 0, adica NULL deoarece nu ne intereseaza un anumit protocol, acesta il putem crea singuri, dupa bunul plac):

  • ICMP – “Internet Control Message Protocol” este utilizat în principal de catre gazde si gateway-uri pentru a raporta erori în comunicare (Spre exemplu comanda “ping”);
  • UDP – “User Datagram Protocol” ;
  • TCP – “Transmission Control Protocol” este un protocol de tip “full-duplex” ce garanteaza ca toate datele vor ajunge la destinatie in ordinea in care acestea au fost transmise de catre sursa. In prezent este protocolul cel mai utilizat in retelele de calculatoare si internet.

2. Socket Bind:

socket_bind – “Lipeste” o adresa IP sau HostName de o resursa creata cu functia socket_create.
Mod de utilizare:

socket_bind ( resursa, adresa, port );

resursa – Reprezinta resursa creata cu functia socket_create (In cazul nostru, variabila $socket).
adresa – Reprezinta adresa IP sau HostName-ul masinii pe care ruleaza daemon-ul.
port-ul – Reprezinta portul pe care se va face ascultarea (poate lipsi, caz in care acesta va fi ales la intamplare).

3. Socket Listen:

socket_listen – “Asculta” pe socket pentru conexiuni.

[ad]

Mod de utilizare:

socket_listen ( resursa, asteptare );

resursa – Reprezinta resursa creata cu functia socket_create (In cazul nostru, variabila $socket).
asteptare – Indica numarul de conexiuni ce vor fi puse in asteptare pentru procesare (0 inseamna limita sistemului de operare).

4. Socket Accept:

socket_accept – Accepta conexiunea pe un socket.
Mod de utilizare:

socket_accept ( resursa );

resursa – Reprezinta resursa creata cu functia socket_create (In cazul nostru, variabila $socket).

5. Socket Read:

socket_read – “Citeste” informatiile transmise de catre client/server.
Mod de utilizare:

socket_read ( resursa, lungime );

resursa – Reprezinta resursa creata cu functia socket_create (In cazul nostru, variabila $socket).
– lungime – Reprezinta lungimea maxima a datelor citite (In bytes).

6. Socket Close:

socket_close – Inchide conexiunea catre client dupa terminarea procesarii.
Initial doream sa fac tutorialul complet intr-un singur articol, dar sunt prea multe de spus si prea putin spatiu.
In cadrul partii a 2-a va voi arata cum sa creati un mic daemon care sa raspunda la conexiuni.

Comments(1)

Leave a comment

Your email address will not be published.Field is required

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 Previous  All works Next