clientServer

chi è il client e chi il server

L'architettura Client/Server è in uso ormai da moltissimi anni, storicamente molte delle tecnologie informatiche sono nate con sistemi che possono assomigliare a questi: un mainframe (una macchina poiuttosto potente relativamente al periodo) a cui sono collegati molti terminali (macchine che invece facevano soltanto input/output).

L'idea di fondo non è cambiata poi molto "un computer che fa il lavoro e altri che si collegano per chiedergli di lavorare", quel che è cambiato è che oggi i terminali hanno un elevato grado di autonomia e si collegano al server soltanto per compiti specifici (se il server non funziona possono magari fare altro).

Questa architettura prevede due ruoli distinti:

server
Offre un qualche servizio, potrebbe trattarsi di una macchina o di un programma come ad esempio un server web. Resta in attesa delle richieste da parte del client e se possibile le soddisfa.
client
Consuma (usa) i servizi offerti dal server. Anche in questo caso con questo termine ci si riferisce sia ad una macchina che ad un software come ad esempio un browser. Questa entità si collega al server per ottenere i servizi.

A questo punto possiamo dare una definizione il più possibile generale:

Una architettura client/server è caratterizzata dalla presenza di due ruoli: il server è una entità che offre un qualche tipo di servizio, il client è una entità che usa il servizio offerto.

Proviamo a vedere un esempio per puntualizzare i ruoli: descriviamo l'architettura C/S usata in ambito web quando si visualizzano sul proprio personal computer le pagine web di un sito. Il server è un processo attivo in ascolto su una determinata porta su una macchina fisica o virtuale connessa ad internet (ha quindi un indirizzo IP) e quando riceve una richiesta di una pagina la invia a chi l'ha richiesta. Il client è un processo in esecuzione sul personal computer dell'utente (un browser) che su indicazione dell'utente chiede al server una determinata pagina.

Nella pratica i ruoli possono anche essere più articolati (l'elenco non è esaustivo):

A ben guardare i casi esposti però è sempre possibile isolare una coppia di server e relavivo client e trattarla isolatamente.

In tutta la trattazione non si è mai parlato delle condizioni alle quali le due entità possono scambiarsi informazioni, questo perché si cerca di tenere i vincoli al minimo: a patto che i due scambino i dati su un canale comune e usando un formato comune non ci sono altri vincoli.

In un sistema client-server, quale delle seguenti affermazioni è corretta?

Il server è sempre una macchina fisica distinta dal client. non è detto che sia una macchina fisica e neanche che siano distine Un programma può agire sia da client che da server. Il client si connette al server solo se entrambi usano lo stesso sistema operativo. non è richiesto in alcun modo, è addirittura più comune il contrario Il server attende richieste e, se possibile, le soddisfa.

Una constatazione: comunemente ci riferisce come al server sia per indicare il processo server sia per indicare la macchina su cui è in esecuzione (analogamente per il client). Frasi del tipo "ci sono problemi con il server" stanno (purtroppo) ad indicare che i problemi sono dal lato server e che non si sta precisando se è la macchina hardware ad avere problemi o è il software ad avere un bug.