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

Langage Delphi Discussion :

Faut-il que j'utilise des threads ?


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut Faut-il que j'utilise des threads ?
    Bonjour,
    voici le problème qui se pose ç moi :
    1- J'ai une application Serveur/Client.
    2- Plusieurs clients évidemment.
    3- Les clients peuvent envoyer des données au serveur simultanément.

    Le problème est qu'il se peut que lorsque plusieurs clients envoient des données au serveur en même temps, le serveur ne peut pas réagir à toutes les demandes, et donc ne traiterait qu'une demande, ou même pourrait freezer..

    J'ai pensé donc à implémenter deux Threads, une variable (x) (un tableau ou une pile) de cette façon :
    1- Un thread pour récupérer les données envoyées par les clients et les écrire dans la variable x.
    2- Un autre pour lire la variable (x) et éventuellement réagir à la demande.
    3- Utiliser un Synchronize, pour éviter une lecture/écriture simultanée de (x).

    Remarque : L'application Serveur/Client est basée sur Indy10 (TIdServer/TIdClient).

    Qu'est-ce que vous en pensez ?
    Je pense qu'il pourrait subsister un problème dans le thread numéro, qui pourrait ne servir à rien, car le problème est dans la raison de existence même !!

  2. #2
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Je suis moi aussi en train de creer une application de chat, avec les mêmes compos que toi.

    Pour le client, il faut creer un thread qui se chargera de la réception des messages, mais pour le serveur, c'est automatique. C'est a dire que le composant IdTCPServer crée automatiquement un thread a la connection d'un client, donc, pas de soucis de ce coté la.

    Pour te rassurer, j'ai fait le test avec quelques amis de connecter 100 clients au serveur, puis de se déconnecter tous en meme temps. Sachant que lors de la déconnection d'un client, j'envoie un message au serveur, ca fait donc 100 messages à traiter a peu près en même temps. Le serveur a tenu le coup sans problemes !!

    Enfin, est ce que tu as déjà eu un bug comme celui que tu énonces ? Parce que, sauf si ce sont des transfert très importants, je ne pense pas que ce genre de problèmes puisse arriver ...

    Bonne chance

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut
    Il y a quelques jours, après quelques jours du développement pour le client, je l'ai testé chez le type pour lequel je le développe.
    Ayant alors auparavant trouvé un problème (le serveur ne reconnait plus les clients après qu'il se soit déconnecté et puis reconnecté, et donc les clients doivent ensuite se reconnecter lorsque le signal avec le serveur est perdu, d'ailleurs n'as-tu pas eu ce problème).

    Enfin bon, pour tester la méthode mise en place pour reconnecter les clients, j'ai demandé au type de fermer l'application serveur, et là il y eu un freez de l'application (et puis rapport d'erreur Windows), et j'ai pensé que ça venait peut-être de là !! car en même temps, je pense avoir fermé le client !!

    Et côté client, je pense qu'il y aucun problème, en tous cas à ce niveau là.

  4. #4
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    le serveur ne reconnait plus les clients après qu'il se soit déconnecté et puis reconnecté,
    Je n'ai pas eu ce probleme

    les clients doivent ensuite se reconnecter lorsque le signal avec le serveur est perdu, d'ailleurs n'as-tu pas eu ce problème
    Si, celui la je l'ai, mais c'est pas trop un probleme : des que le thread coté client se termine, il suffit d'attendre un peun puis relancer la connection ...

    Sinon, je n'ai jamais eu d'autres problemes ...

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Ukraine

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 162
    Points : 163
    Points
    163
    Par défaut
    OK merci bien pour l'info;
    Et je pense à revoir la méthode utilisée (je vais utiliser le thread comme tu dis)(pour le client), mais une question (pour sortir un peu du sujet de base), je vérifie que le thread est terminé (avec OnTerminated ??) où ?? (dans le OnExecute du thread ?? (je ne pense pas) ou alors ... ?

  6. #6
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Voila un bout de code que j'ai tiré d'un livre et qui fonctionne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    procedure TReceptionThread.Execute;
    var Recept :String;
    begin
      while not (Terminated) and (IdClient.Connected) do
      begin
        Recept:='';
        try
          Recept:=IdClient.IOHandler.ReadLn;
        except
          Terminate;
        end;
     
        //Ici les actions a faire lors de la réception
      end;
      //ici les actions lorsque la connection se coupe
    end;
    Je pense que avec OnTerminate, tu devrais y arriver aussi

    Bonne chance !

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

Discussions similaires

  1. Avis sur la bonne utilisation des Threads
    Par Pitivier dans le forum Général Java
    Réponses: 8
    Dernier message: 28/11/2006, 21h07
  2. connexion socket utilisant des threads
    Par alceste dans le forum C++
    Réponses: 16
    Dernier message: 14/10/2006, 13h00
  3. [Débutant]Utilisation des Threads
    Par maniolo dans le forum Débuter avec Java
    Réponses: 19
    Dernier message: 10/07/2006, 12h31
  4. Utilisation des threads
    Par Valinor dans le forum Linux
    Réponses: 2
    Dernier message: 30/11/2005, 17h41
  5. Utilisations des Threads
    Par phoenix440 dans le forum Réseau
    Réponses: 15
    Dernier message: 21/08/2005, 18h19

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