Forum général.général Besoin d'aide application client/serveur

Posté par  .
Étiquettes : aucune
0
22
jan.
2006
Bonjour,

j'ai un programme client serveur de réservation de places de cinéma, et je ne m'y connais pas beaucoup en programmation système.
Voici mon cas d'étude :
- les processus clients émettent des requêtes de consultation et de réservation (n places)
- le processus serveur prend en compte la réservation, créé autant de fils que de réservations (n) qui envoient au client un acquitement ou un message d'erreur.

Les contraintes :

- les informations liées à la réservation (date, séance, cinéma, salle, nombre de places restantes) sont stockées dans une table en mémoire centrale
- processus client et serveur s'éxécutent sur la même machine Linux
- les processus fils du processus serveur Réservation recouvrent le code hérité du père par une code exécutable contenant les actions de réservation.

Dans un premier temps, j'aimerais faire le point sur les outils de communication entre processus client et serveur que je dois choisir.

De ce que j'ai compris, il y en a plusieurs :

- les tubes : anonymes et nommés
- les files de message (IPC)
- la mémoire partagée (IPC)
- les sémaphores (IPC)
- les sockets (réseaux)

La communication entre C et S est bi-directionnelle et s'éxécute sur la même machine ; je mets donc de coté les tubes et les sockets et je m'oriente donc vers les 3 outils IPC, même si avec les sockets cela reste possible.

Y a-t-il des volontaires pour me guider sur la suite ?

Merci d'avance, j'ai une semaine pour maîtriser tout ça ...
  • # Théorie

    Posté par  . Évalué à 2.

    1) Je crois bien que les pipes Linux sont bidirectionnels;
    2) Tu as oublié les signaux POSIX dans ta liste (même si je te les déconseille, ils sont peu utilisables pour une communication complexe);
    3) Il existe un autre type de sockets : les sockets UNIX, qui sont locales à une machine. Je pense que tu devrais y songer, elles me semblent bien adaptées à ton problème.
    • [^] # Re: Théorie

      Posté par  . Évalué à 1.

      Effectivement, j'ai trouvé quelques exemples à l'aide des sockets.
      Voilà pour le moment la façon dont je vois les choses :

      1. Communication Entre les clients et le serveur :

      Communication par sockets
      requêtes de consultation et de réservation

      2. Communication entre le processus Réservation Père et ses fils :
      Segment de mémoire partagée, mais se pose la question de la synchronisation et de la protection enb écrtiture. Là, j'ai pas trop l'impression de tout comprendre...


      une idée ?
      • [^] # Re: Théorie

        Posté par  . Évalué à 1.

        Bonjour,

        Tu avais cité les sémaphores ...

        Donc pour la synchronisation tu peux les utiliser ;)
        • [^] # Re: Théorie

          Posté par  . Évalué à 1.

          Merci du conseil, mais plus précisément ça donne quoi ?
        • [^] # Re: Théorie

          Posté par  . Évalué à 0.

          Merci du conseil, mais plus précisément ça donne quoi ?
        • [^] # Re: Théorie

          Posté par  . Évalué à 0.

          Merci du conseil, mais plus précisément ça donne quoi ?
      • [^] # Re: Théorie

        Posté par  . Évalué à 1.

        Une autre idée, pour la communication père/fils : utiliser pipe(2) dans le père, et, juste avant de lancer le fils, utiliser fcntl(2) pour que l'un des descripteurs de fichiers associé au pipe reste ouvert à travers l'execve(2).

        A toi d'évaluer quelle solution te convient le mieux...

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.