Author: Christian.Queinnec@lip6.fr

## Introduction

La programmation répartie permet de construire des applications fonctionnant sur plusieurs machines reliées ensemble sur un réseau et communiquant entre elles pour accomplir une tâche. Le modèle sous-jacent est celui de la programmation parallèle à mémoire répartie. Les programmes locaux ou distants communiquent via un média qui correspond à un protocole réseau. Le plus connu et le plus utilisé d'entre eux est IP (Internet protocol) et ses surcouches TCP et UDP. À partir de ces communications de bas niveau, de nombreux services sont bâtis sur le modèle client-serveur où un serveur attend des requêtes de différents clients, les traite et envoie les réponses à ces demandes. On peut citer le protocole HTTP permettant la communication entre navigateur et serveur Web. La répartition des tâches entre clients et serveurs correspond à différentes architectures logicielles.
Le langage Objective CAML offre, via sa bibliothèque `Unix`, différentes possibilités de communication entre programmes. Les prises de communication (sockets en anglais) permettent la communication selon le protocole TCP/IP et UDP/IP. Cette partie de la bibliothèque `Unix` est portée sous Windows. La possibilité de dupliquer des processus <<lourds>> (`Unix.fork`) ou de créer des processus légers (`Thread.create`) permet de réaliser des serveurs acceptant plusieurs requêtes en même temps. À partir de ces couches de bas niveau, il est aisé de construire des client-serveur universels paramétrés par une fonction de traitement. Enfin, un point important pour la création de nouveaux services est la définition d'un protocole propre à l'application.