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

Delphi Discussion :

[Delphi7/Kylix3] TSQLConnection


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Par défaut [Delphi7/Kylix3] TSQLConnection
    BOnjour,

    Je développe un serveur résident qui doit stocker en mémoire des objets chargés depuis une base de donnée et les servir à la demande à des CGI.

    Chaque CGI se connecte en TCP pour faire sa requete et attend une réponse que lui envoie le serveur.

    J'utilise les composants Indy IdTCPserver, IDTcpClient du package dclIndy70.

    Voila en gros le résumé de la situation.

    Maitenant mon problème :
    sous windows tout fonctionne sans probleme, le serveur accepte une forte charge sans broncher.

    sous Linux/Kylix : redHat7
    Au bout d'un certains nombres de traitements , le serveur refuse de faire toute nouvelle tache prétextant soit :
    -EDatabaseError : Can't connect to MySQL server on (10061)
    -EFOpenError : Too many open files
    -EIdInvalidSocket,Impossible d'allouer le socket

    Il me semble tout bien nettoyer comme il faut, (j'utilise un programme de test sous win pour trouver les leak il n'y en pas de mon fait) alors je me demande si ces composants ne garderaient pas les sockets ouverts lorsqu'ils recoivent une connexion ou qqchose du genre ?

    D'avance merci pour vos éclairages.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2006
    Messages
    624
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 624
    Par défaut
    Tu utilises du mapping objet/relationnel?

    Si tu as un exmple de stoquage d'objets delphi dans une base je suis preneur.

    Pour les messages d'erreur, cela vient probablement de la configuration de MySql sous Linux en tout cas en ce qui concerne le message EDatabaseError.

    EFOpenError c'est un pb d'ouverture de fichier.
    EIdInvalidSocket: peut être dû à la présence d'un firewall, ports non ouverts,
    d'une config du mode d'ouverture, ou une tentative d'acceder à d'autres ports pour répartir les connections.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Par défaut
    Merci pour tes précisions sur mes erreurs, je connaissais leur signification.
    Ce qui est étrange c'est qu'au bout d'un certain nombre de taches, quoi que je fasse, le programme ne veut plus ouvrir de socket ou ouvrir de connexions comme s'il avait atteint son quota maximum (alors que je nettoye tous mes objets et ferme toutes mes connexions).

    Je me demandais donc si les thread créés par le IdTCPServer étaient propres et fermaient bien leur socket de discussion avec le client ou pas.

    Personne n'a rencontré de problème identique ?

    -----------

    Pour le stockage : j'utilise des champs BLOB, dans lequel je stocke des objets sérialisés, c'est a dire décomposés selon leurs propriétés et stocké sous la forme d'une longue string contenant des paires clés/ valeurs.

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TStock = class (tobject)
    public
      ID : integer;  
      nom : string ;
      count : integer;
    end;
    sera stocké sous la forme : I=8,N=toto,c=18

    SI mon objet contient un un objet complexe j'applique la meme stratégie a l'intérieur.

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 46
    Par défaut
    Des précisions :

    J'ai avancé dans mes investigations, elles m'ont permis d'identifier que :
    sur un action simple :
    -création connecteur
    -connexion bd
    -requete sql
    -décoonnexion bd
    -free connecteur

    au bout de 1000 appels ca se bloque : error : EDatabaseError,Can't connect to MySQL server on '192.168.0.30' (10061)
    Le programme ne veut plus effectuer de traitements.

    En regardant dans /proc/"idproc"/fd/ sous linux, on voit clairement que pour chaque connexion un socket reste a la fin du traitement.( ce qui n'est pas le cas sur une action de lecture-écriture de fichier, ou autre)

    J'utilise un objet TSQLConnection (de SqlExpr de delphi) , je vais regarder les threads existants et google groups mais si quelqu'un a une idée n'hésitez pas.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/12/2002, 22h23
  2. [Kylix] c++ builer delphi kylix3
    Par cyberalle dans le forum EDI
    Réponses: 4
    Dernier message: 07/10/2002, 23h48
  3. Réponses: 2
    Dernier message: 01/10/2002, 12h25
  4. [Kylix] kylix3
    Par blue dans le forum EDI
    Réponses: 8
    Dernier message: 13/09/2002, 20h47
  5. [Kylix] kylix3
    Par alexsmadja dans le forum EDI
    Réponses: 2
    Dernier message: 28/05/2002, 17h47

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