IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Détection de déconnexion


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Femme Profil pro
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 93
    Points
    93
    Par défaut Détection de déconnexion
    Bonjour,

    Je travail sur une application qui possède une gestion de licences. Plusieurs postes distants peuvent travailler en même temps et accéder à des données d'une BDD sur le serveur.

    Le fait qu'un utilisateur soit connecté est enregistré dans la BDD lors de l'authentification. Le problème est que pour mettre à jour ce champ lors d'une déconnexion, il faut quitter le programme correctement. Lors d'une coupure de courant ou un plantage par exemple, impossible de modifier la BDD pour avoir un statut "déconnecté". Ce problème bloque l'accès future pour l'utilisateur déconnecté physiquement mais pas dans la BDD.

    J'aimerais savoir si il existe un moyen de détecter qu'une application n'est plus active. Ma première idée est de mettre à jour par le client à interval régulier (Toutes les minutes par exemple) une info de temps dans un fichier sur ls serveur et ensuite de tester que le contenu de ce fichier est à jour (Si il ne l'est pas le programme n'est plus actif donc on peut déconnecter l'utilisateur).

    J'aimerais savoir si il existe quelque chose de plus efficace qu'un thread qui met à jour un fichier sur le server, ce qui me semble assez lourd comme procédé.

    J'espère que vous aurez compris mon problème.

    Merci d'avance pour vos idées

    PS. Je suis sous Delphi 6

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Je crois que ton serveur pourrait simplement faire un ping des clients
    à intervalle régulier.

    Mettre en place un système de watchdog entre tes clients et ton serveur
    ne devrait pas être compliqué à mettre en route non plus.

    ce serait déjà plus léger qu'une gestion de fichier.

    Quelle genre d'authentification?
    Un login name + password par usager?

    Si c'est le cas, on peut pensser que
    l'usager xyz peut être connecté qu'une seul fois...
    et si l'usager xyz veux encore se logger, on termine
    l'ancienne connection "probablement morte"
    et on lui permet de se logger à nouveaux...
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  3. #3
    Membre régulier
    Femme Profil pro
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 93
    Points
    93
    Par défaut
    Hello Eric, merci de ta réponse


    J'utilise effectivement une authentification Username mot de passe pour chaque utilisateur qui peuvent se connecter sur n'importe quel poste sur lequel l'application est installée.

    Si c'est le cas, on peut pensser que
    l'usager xyz peut être connecté qu'une seul fois...
    et si l'usager xyz veux encore se logger, on termine
    l'ancienne connection "probablement morte"
    et on lui permet de se logger à nouveaux...
    Le problème avec cette solution et qu'on détecte une connection "morte" lorsque le même utilisateur se reconnecte, alors que je dois la détecter au moment de la connexion de n'importe qui. En fait, j'ai un système de licences flottante donc si la licence est allouée à une connection morte et qu'un autre utilisateur la demande, on doit pouvoir le gérer.

    Concernant les Pings, ils permettent de savoir si un ordinateur est connecté sur le réseau, mais pas de savoir si une application est lancée sur cette machine est-ce juste?
    Concernant le watchdog, une des contraintes qui m'a été donnée est d'éviter un service qui tourne sur le serveur. les clients doivent savoir "tout seul" si une licence est morte ou pas. (Je suis difficile je sais )

    Je me dirige maintenant vers le monitoring de base de données qui permet apparemment de connaître les machines qui sont connectées à un serveur de base de données. En enregistrant l'IP de la machine sur laquelle un utilisateur se connecte à mon application, je devrais apparemment pouvoir savoir si la connexion est encore active ou non. Est-ce que tu connais ce système je viens de le découvrir?

    Merci encore de ta réponse

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Sans en savoir plus c'est difficile de t'aider d'avantage.

    Quelle est la base de données?
    J'ai cru comprendre que tu as déjà un programme serveur qui
    gère les connections... c'est lui aussi qui pourra faire le nettoyage?

    Quand je parlais du Ping, je me suis mal exprimé.
    Effectivement, un Ping te dis simplement si la machine
    est encore sur le reseau. Je pensais plutot à un Ping fait maison
    qui serait gérer par ton serveur et tes clients.
    Genre serveur demande au client "est tu encore là?"
    et le client répond..."Ben oui! je suis encore là!"

    Autre question... on parle de combien de client? 10,100,10000?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    (*
    1- un usager veux ce connecter...
    2- Le serveur verifie si il y a une licence disponible...
        - Si il y en a une de libre, on permet le login
        - si aucune, il effectue parmis toutes les licences allouées une
          vérification genre Ping maison vers les connections en cours...
          si on a pas de réponse d'un client, on libert cette connection "morte"
          - si aucune connection de libre... et bien...on est plein.
          - si une connection est libre retour à 2
    *)
    Aussi, si on connait une plage horaire où il n'y a pas de client,
    on peut "nettoyer" les connections durant la nuit par exemple.

    Quand tu parle de perte de connection, on parle bien ici d'une connection
    socket?

    Sur quel genre de réseau? local, internet ou même mixte?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  5. #5
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Bonjour,

    Tu dis :

    "... En enregistrant l'IP de la machine sur laquelle un utilisateur se connecte à mon application, je devrais apparemment pouvoir savoir si la connexion est encore active... "


    1) sur le poste
    Donc tu suppose que 1 le pc plante sur un poste, donc au prochain démarrage sur ce poste de l'application tu veux savoir si l'applicatif (le poste) à planté. Il suffit pour cela de créer un fichier connect.old au moment du démarrage de ton appli (dans le repertoire de l'executable) et de le supprimer à la fermeture de l'appli.
    Donc si au démarrage de l'application tu trouve le fichier connect.old c'est que tu as eu un plantage.

    2) sur le serveur
    Si tu est sous ACCESS, il possible de lancer une requette spécifique qui te retourne les utilisateurs réellement connecté à une base de données. donc si tu mets cela sur un timer dans l'applicatif, au moment du plantage du poste (cf 1) tous les autres poste seront au courant et tu pourras réaliser tel ou tel mise à jour.

    Mais comme le dit Eric : Qu'elle est ta base de données ?

    @+

  6. #6
    Membre régulier
    Femme Profil pro
    Inscrit en
    Avril 2007
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 209
    Points : 93
    Points
    93
    Par défaut
    Je travail avec une base de donnée Firebird qui me permet le même type d'analyse qu'avec ACCESS dont tu nous parlais Buzz.

    Je vais utiliser ce système qui me permet le plus adapté à ma situation et qui résout finalement bien mes problèmes. (C'est de cela que je parlais en citant le monitoring de la base de données)
    En fait ce qui se passera c'est que les clients peuvent aller interroger ces tables de monitoring sur le serveur afin de savoir quel autre client est encore connecté ou non. c'est exactement ce que je cherchais. je ne savais pas que c'était possible.

    Le nombre de clients connectés est dans l'ordre d'environ 20, pas plus.

    Merci à vous deux pour votre précieuse aide

    Meilleures salutations

    Nono

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Détection de déconnexion au réseau
    Par WalidM dans le forum Administration
    Réponses: 2
    Dernier message: 16/04/2015, 15h55
  2. [Socket] Détection de déconnexion
    Par Wookai dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 14/04/2005, 21h58
  3. TServerSocket: Détection déconnexion client
    Par Neo41 dans le forum C++Builder
    Réponses: 3
    Dernier message: 04/09/2004, 19h46
  4. Détections avec WebBrowser
    Par Wazo_Sportive dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/08/2002, 19h32
  5. Détection de 2 touches appuyées
    Par cyrose dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/07/2002, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo