Socket Unix - Modello server client
La maggior parte delle applicazioni di rete utilizza l'architettura client-server, che fa riferimento a due processi o due applicazioni che comunicano tra loro per scambiare alcune informazioni. Uno dei due processi funge da processo client e un altro processo funge da server.
Processo client
Questo è il processo, che in genere effettua una richiesta di informazioni. Dopo aver ottenuto la risposta, questo processo potrebbe terminare o potrebbe eseguire altre elaborazioni.
Example, Il browser Internet funziona come un'applicazione client, che invia una richiesta al server Web per ottenere una pagina Web HTML.
Processo server
Questo è il processo che prende una richiesta dai client. Dopo aver ricevuto una richiesta dal client, questo processo eseguirà l'elaborazione richiesta, raccoglierà le informazioni richieste e le invierà al client richiedente. Una volta terminato, diventa pronto per servire un altro cliente. I processi del server sono sempre attenti e pronti a soddisfare le richieste in arrivo.
Example - Il server Web continua ad attendere le richieste dai browser Internet e non appena riceve una richiesta da un browser, prende una pagina HTML richiesta e la rimanda a quel browser.
Notare che il client deve conoscere l'indirizzo del server, ma il server non ha bisogno di conoscere l'indirizzo o anche l'esistenza del client prima che la connessione venga stabilita. Una volta stabilita una connessione, entrambe le parti possono inviare e ricevere informazioni.
Architetture a 2 e 3 livelli
Esistono due tipi di architetture client-server:
2-tier architecture- In questa architettura, il client interagisce direttamente con il server. Questo tipo di architettura potrebbe presentare alcuni buchi di sicurezza e problemi di prestazioni. Internet Explorer e Web Server funzionano su un'architettura a due livelli. Qui i problemi di sicurezza vengono risolti utilizzando Secure Socket Layer (SSL).
3-tier architectures- In questa architettura, un altro software si trova tra il client e il server. Questo software intermedio è chiamato "middleware". Il middleware viene utilizzato per eseguire tutti i controlli di sicurezza e il bilanciamento del carico in caso di carico pesante. Un middleware accetta tutte le richieste dal client e, dopo aver eseguito l'autenticazione richiesta, passa tale richiesta al server. Quindi il server esegue l'elaborazione richiesta e invia la risposta al middleware e infine il middleware restituisce questa risposta al client. Se si desidera implementare un'architettura a 3 livelli, è possibile mantenere qualsiasi middleware come Web Logic o software WebSphere tra il server Web e il browser Web.
Tipi di server
Esistono due tipi di server che puoi avere:
Iterative Server- Questa è la forma più semplice di server in cui un processo server serve un client e dopo aver completato la prima richiesta, accetta la richiesta da un altro client. Nel frattempo, un altro cliente continua ad aspettare.
Concurrent Servers- Questo tipo di server esegue più processi simultanei per servire molte richieste contemporaneamente perché un processo può richiedere più tempo e un altro client non può aspettare così a lungo. Il modo più semplice per scrivere un server simultaneo in Unix è eseguire il fork di un processo figlio per gestire ogni client separatamente.
Come rendere cliente
Le chiamate di sistema per stabilire una connessione sono in qualche modo diverse per il client e il server, ma entrambi coinvolgono il costrutto di base di un socket. Entrambi i processi stabiliscono i propri socket.
I passaggi necessari per stabilire un socket sul lato client sono i seguenti:
Crea un socket con l'estensione socket() chiamata di sistema.
Collegare il socket all'indirizzo del server utilizzando il connect() chiamata di sistema.
Invia e ricevi dati. Ci sono diversi modi per farlo, ma il modo più semplice è usare ilread() e write() chiamate di sistema.
Come creare un server
I passaggi necessari per stabilire un socket sul lato server sono i seguenti:
Crea un socket con l'estensione socket() chiamata di sistema.
Associare il socket a un indirizzo utilizzando il bind()chiamata di sistema. Per un socket del server su Internet, un indirizzo è costituito da un numero di porta sulla macchina host.
Ascolta i collegamenti con il listen() chiamata di sistema.
Accetta una connessione con accept()chiamata di sistema. Questa chiamata in genere blocca la connessione fino a quando un client non si connette al server.
Inviare e ricevere dati utilizzando il read() e write() chiamate di sistema.
Interazione client e server
Di seguito è riportato il diagramma che mostra l'intera interazione tra client e server: