Unix Socket - Modèle client-serveur
La plupart des Applications Net utilisent l'architecture Client-Serveur, qui fait référence à deux processus ou deux applications qui communiquent entre eux pour échanger des informations. L'un des deux processus agit comme un processus client et un autre processus agit comme un serveur.
Processus client
C'est le processus, qui fait généralement une demande d'informations. Après avoir obtenu la réponse, ce processus peut se terminer ou effectuer un autre traitement.
Example, Internet Browser fonctionne comme une application cliente, qui envoie une demande au serveur Web pour obtenir une page Web HTML.
Processus serveur
C'est le processus qui prend une demande des clients. Après avoir reçu une demande du client, ce processus effectuera le traitement requis, collectera les informations demandées et les enverra au client demandeur. Une fois terminé, il devient prêt à servir un autre client. Les processus du serveur sont toujours alertes et prêts à répondre aux demandes entrantes.
Example - Le serveur Web attend les demandes des navigateurs Internet et dès qu'il reçoit une demande d'un navigateur, il récupère une page HTML demandée et la renvoie à ce navigateur.
Notez que le client a besoin de connaître l'adresse du serveur, mais que le serveur n'a pas besoin de connaître l'adresse ni même l'existence du client avant que la connexion ne soit établie. Une fois la connexion établie, les deux parties peuvent envoyer et recevoir des informations.
Architectures à 2 et 3 niveaux
Il existe deux types d'architectures client-serveur -
2-tier architecture- Dans cette architecture, le client interagit directement avec le serveur. Ce type d'architecture peut présenter des failles de sécurité et des problèmes de performances. Internet Explorer et Web Server fonctionnent sur une architecture à deux niveaux. Ici, les problèmes de sécurité sont résolus à l'aide de Secure Socket Layer (SSL).
3-tier architectures- Dans cette architecture, un autre logiciel se trouve entre le client et le serveur. Ce logiciel intermédiaire est appelé «middleware». Les intergiciels sont utilisés pour effectuer toutes les vérifications de sécurité et l'équilibrage de charge en cas de charge importante. Un middleware prend toutes les demandes du client et après avoir effectué l'authentification requise, il transmet cette demande au serveur. Ensuite, le serveur effectue le traitement requis et renvoie la réponse au middleware et enfin le middleware renvoie cette réponse au client. Si vous souhaitez implémenter une architecture à 3 niveaux, vous pouvez conserver n'importe quel middleware tel que Web Logic ou WebSphere entre votre serveur Web et votre navigateur Web.
Types de serveur
Vous pouvez avoir deux types de serveurs -
Iterative Server- Il s'agit de la forme la plus simple de serveur où un processus serveur sert un client et après avoir terminé la première demande, il prend la demande d'un autre client. Pendant ce temps, un autre client attend.
Concurrent Servers- Ce type de serveur exécute plusieurs processus simultanés pour traiter plusieurs requêtes à la fois car un processus peut prendre plus de temps et un autre client ne peut pas attendre aussi longtemps. Le moyen le plus simple d'écrire un serveur concurrent sous Unix est de créer un processus enfant pour gérer chaque client séparément.
Comment faire du client
Les appels système pour établir une connexion sont quelque peu différents pour le client et le serveur, mais tous deux impliquent la construction de base d'un socket. Les deux processus établissent leurs propres sockets.
Les étapes impliquées dans l'établissement d'un socket côté client sont les suivantes:
Créez une prise avec le socket() appel système.
Connectez la prise à l'adresse du serveur à l'aide du connect() appel système.
Envoyez et recevez des données. Il existe plusieurs façons de le faire, mais la façon la plus simple est d'utiliser leread() et write() appels système.
Comment créer un serveur
Les étapes à suivre pour établir une socket côté serveur sont les suivantes:
Créez une prise avec le socket() appel système.
Liez le socket à une adresse en utilisant le bind()appel système. Pour une socket serveur sur Internet, une adresse se compose d'un numéro de port sur la machine hôte.
Écoutez les connexions avec le listen() appel système.
Acceptez une connexion avec le accept()appel système. Cet appel bloque généralement la connexion jusqu'à ce qu'un client se connecte au serveur.
Envoyez et recevez des données à l'aide du read() et write() appels système.
Interaction client-serveur
Voici le diagramme montrant l'interaction complète du client et du serveur -