Une communication client-serveur basée sur la mémoire partagée

Ce programme présente la communication entre deux processus s'exécutant sur le même ordinateur en utilisant de la mémoire partagée.

Les fichiers sources sont dans le répertoire ${UPS_HOME}/upssdk/demo/${UPS_LANGUAGE}/mempar/.

Le noyau d'exécution doit être multi-processus via le partage de l'entrepôt Systeme qui doit être desservi par le programme serveur.

Cela se déclare dans le fichier ${UPS_HOME}/ini/${UPS_USER}/upsoms.ini comme suit :

Serveur=serveur

Mode compilé

Commande de compilation

upscmp Source=demande

upscmp Source=serveur

upscmp Source=client

Commande d'exécution

Exécution d'Up ! Object Request Broker

upsorb PortUpsOrb=1632

Exécution du serveur

serveur PortUpsOrb=1632 PortServeur=1640 NbServeurs=1 PasDOrb=Non

Exécution du client

client PortUpsOrb=1632 PortServeur=1650 NbServeurs=1 PasDOrb=Non

Mode interprété

Exécution d'Up ! Object Request Broker

upsorb PortUpsOrb=1632

Exécution du serveur

upssng Source=serveur.upl PortUpsOrb=1632 PortServeur=1640 NbServeurs=1 PasDOrb=Non

Exécution du client

upssng Source=client.upl PortUpsOrb=1632 PortServeur=1650 NbServeurs=1 PasDOrb=Non

Fichiers sources

Source du module partagé

Source Module "Exemple d'emploi de la mémoire partagée" Version 4.0.0 ModuleDynamique;

Composant Dans "c:/up/exemples/libd1.upl";

Source du composant du module partagé

Source Composant "Exemple d'emploi de la memoire protegee" Version 4.0.0 RattacherA "c:/up/exemples/demande.upl";

SegmentPublic MemoirePublique;

Public :
/******/
Type DemandeClient Defaut
/***********************/
Fin Type

Variable
/******/
Public :
/******/
DebuterComposant
/**************/
Debut
Si SegmentPublic.NbUtilisations()==1 Alors Fin Si
Fin DebuterComposant

Source du serveur

Source Composant "Exemple d'emploi de la memoire protegee" Version 4.0.0;

SegmentPublic MemoireProtegee;

ImporterModule
/************/
Principal
/*******/
Variable
/******/
Debut
TantQue Vrai Faire Fin TantQue
Fin Principal

Source du client

Source Composant "Exemple d'emploi de la mémoire partagée" Version 4.0.0;

SegmentPublic MemoireProtegee;

ImporterModule
/************/
Procedure Dialoguer(Libelle : Caractere)
/************************************/
Variable
/******/
Debut
SD.Prendre(SynchronisationEcritureExclusive);
D=DemandeClient();
D.TacheClient=TachePrincipale;
D.Libelle=Libelle;
ListeDeDemandes=ListeDeDemandes+D;
SD.Lacher();
TachePrincipale.SuspendreTache();

Ecran.Ecrire(D.Libelle);
Fin Procedure

Principal
/*******/
Debut Dialoguer("Bonjour le monde");
Attendre(1.0);
Dialoguer("Hello the world");
Attendre(1.0);
Dialoguer("Guten tag die welt");
Fin Principal

Résultat de l'exécution

BONJOUR LE MONDE HELLO THE WORLD GUTEN TAG DIE WELT