Una din primele întrebări pe care le adresăm unui programator începător dornic de cunoaştere aprofundată a programării web este: “Ce este web-ul?”. Deşi o întrebare cu un răspuns aparent simplu, rar ni se întamplă să primim un acelaşi răspuns. Pentru fiecare dintre noi web-ul înseamnă altceva, şi se referă întotdeauna la motivele pentru care îl utilizăm. Poate fi un mediu de socializat, un bun suport de promovare, de comunicare, de făcut marketing şi implicit bani. Pentru unii însă, web-ul este o reţea interconectată de calculatoare, de maşini care interacţionează între ele pe principiul client-server.

Arhitectura client-server este o arhitectură de bază în funcţionare internetului, şi neînţeleasă de la început, poate face ca aprofundarea programării web şi a conceptelor din aceasta sa fie foarte greu de înţeles şi poate duce la confuzii care pot avea efecte devastatoare asupra unor aplicaţii lansate publice.

Client

Clientul este partea din această arhitectură care va iniţia comunicarea. Este cel care va trimite o cerere către un server pentru a primi un răspuns, nişte informaţii peronalizate pentru cererea care tocmai a făcut-o, date in general. Clientul poate fi un browser de web care se conectează la un server web, poate fi un client de e-mail(gen Thunderbird sau Microsoft Outlook) care se conectează la un server de email, trimite datele de autentificare pentru un cont de e-mail si cererea de primire a mesajelor noi, poate fi un client de FTP(gen Smart FTP sau Cute FTP) care va trimite unui server de FTP cererea de stocare pe acel server a unui fişier, urmat de fişierul în sine şi va primi ca răspuns confirmarea primirii acestuia sau un mesaj de eroare corespunzător. Aşadar clientul este cel care va acţiona şi va determina un întreg lanţ de acţiuni din partea server-ului: iniţiază cererea către server, aşteaptă raspunsul de la server, primeşte răspunsul de la server şi în final îl returnează utilizatorului posibil într-un mod formatat.

Server

Un server, în general, este probabil cea mai pasivă, indolentă şi comodă invenţie de pe internet. Serverul nu are niciodată iniţiativă, principala lui activitate este de a sta şi de a aştepta. Serverul nu va acţiona niciodată din cont propriu, nu va transmite date decât dacă este întrebat şi decât dacă sunt urmate anumite reguli de comunicare. Cu toate acestea, odată “deranjat” un server va face tot posibilul să mulţumească cererea clientului. Când este pornit, un server va lua poziţia de aşteptare de conexiuni (numită mai tehnic: listening state), de regulă acesta ascultă pe un anume port primirea conexiunilor. La primirea unei astfel de conexiuni, deci implicit a unei cereri, el va face toate demersurile necesare pentru a returna rezultatul aşteptat. Dacă este un server web, va întoarce clientului (browserul web) codul html al paginii care a fost cerută, dacă este un server de e-mail va returna clientului o listă cu toate email-urile pe care le-a primit de la ultima cerere, daca este un server de MySQL va prelua interogarea SQL primită o va executa şi va returna setul de date rezultat. Aşadar un server stă şi aşteaptă conexiuni pe care le va servi cererile de îndată ce au fost primite.

Diferenţe

Nu trebuie înţeles că toate calculatoarele personale, laptopurile sau orice maşină folosită în mod frecvent de o fiinţă umană este un client şi restul sunt servere. Noţiunea de client-server este întâlnită între oricare două maşini între care exista o cale de acces, o conexiune directă sau indirectă. De exemplu, să presupunem ca avem o maşină pe care ţinem o bază de date MySQL, o maşină pe care o folosim ca web server (deci unde stocăm fişierele unui web site) şi o maşină care va fi folosită drept client. Astfel, iniţiem o cerere de la client către serverul web pentru a primi o anumită pagina în care vom vizualiza, de exemplu, produsele de pe un magazin online. Serverul web primeşte cererea şi va acţiona întocmai, însă datele necesare generării acestei pagini HTML care va conţine informaţiile despre produse, se află în baza de date, deci pe un alt server. Serverul web, prin intermediul librariilor din PHP va iniţia acum o cerere către serverul de MySQL pentru a întoarce informaţiile despre produse, pe care cel din urmă le va furniza. În această ultimă situaţie serverul web este client pentru serverul de MySQL pentru că el este cel care iniţiază o cerere de date iar baza de date va furniza raspunsul la această cerere. În final, cu datele primite se va furniza pagina HTML complet formatată.

Trackback

9 comments until now

  1. theheartcollector

    Probabil multa lume intelege prin notiunea de “server” un calculator de sine statator.

    De fapt aceasta notiune ar trebui privita mai degraba ca o aplicatie (un program) care stie sa raspunda la cereri. De exemplu pot sa instalez un WAMP pe orice calculator. Astfel, pe calculatorul respectiv voi avea instalate o instanta de Apache, una de Mysql si un interpretor de PHP. Prin intermediul unui client (Mozilla), instalat pe acelasi calculator, pot face requesturi (cereri) la serverul Apache, iar cu alt client (Putty sau chiar command line) pot face requesturi la serverul de MySQL. In acest caz, clientul va trimite requesturile la adresa de loopback a calculatorului respectiv (127.0.0.1).

  2. Ceea ce zici tu este perfect adevarat, insa faptul ca le instalezi pe un calculator pe toate 3 este un caz particular a ceea ce s-a explicat mai sus.

    Serverul, pe langa o aplicatie care stie sa execute ce am discutat mai sus, se mai poate referi intr-adevar si la o unitate fizica, o masina care hardware este facuta sa sustina diverse aplicatii tip server si sa asigure buna functionare a lor.

  3. Articolul ăsta m-a dezamăgit. Mă aşteptam la ceva mai tehnic, mai corect:
    - world wide web = un serviciu internet; menţionarea de câteva servicii şi protocoale
    - “arhitectura” client-server; corect: modelul client-server; eventual puteai spune un cuvânt şi despre protocoale distribuite.
    - folosirea corectă a termenilor server şi daemon (sau demon)

    Dacă abordai problema aşa puteau înţelege şi începătorii ce şi cum. De la “Pentru fiecare dintre noi web-ul înseamnă altceva” mi-a fost clar că nu e un post tehnic.

  4. N-am dorit in nici o clipa ca acest post sa fie unul tehnic, motiv pentru care l-am postat si in categoria “altele”. Am vrut sa explic intr-un limbaj cat mai comun, pe care sa-l inteleaga oricine (chiar si cel mai incepator dintre incepatori) care este diferenta. Sunt convins ca daca intram in detalii cu servicii, daemon-i, protocoale de comunicare si tot tacamul l-au fi inteles cei ca tine sau cei care stiu deja cat de cat chestii de genul asta.

    Motivul pentru care am scris acest articol si in acest mod este acela ca multi din cei cu care am lucrat sau care au venit la mine pentru a le arata “calea cea dreapta spre cunoastere” :D nu stiau sa faca o diferenta clara intre cele 2. Incearca sa explici unuia care nu stie diferenta clara intre client si server cum sa integreze javascript cu php-ul si sa genereze cod javascript in functie de parametrii.

  5. Se poate explica, dar trebuie explicat mai elaborat, mai exact, fără să sari peste termeni. Se începe cu “cum funcţionează Internetul” :)

  6. Tocmai am postat ceva care explica ce şi cum, teoretic şi practic.

  7. Jos palaria. Articolele sunt superbe. N`am cuvinte. Bravo.

  8. Sunt bune articolele asa cum sunt (mai ales in romaneste).
    Acum le-am descoperit si=mi plac.

Add your comment now