begin process at 2012 05 30 00:48:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

optimisation de code, liens entre objets


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

optimisation de code, liens entre objets

jeudi 22 juillet 2010 à 11:34:18 | optimisation de code, liens entre objets

szambaux

Bonjour, je cherche à optimiser une partie de mon code
Je suis en train de développer un serveur SSL avec Qt;
j'ai plusieurs classes:
-CoreServer
-Client (QObject)
|-ClientSocket (QSslSocket)
|-ClientUser
La Classe client contient entre autre un pointeur vers le socket SSl du client

Quand je reçoit des données sur mon serveur je récupère le socket via


Code C/C++ :
QSslSocket *socket = qobject_cast<QSslSocket *>(sender());


Je cherche à récupérer le client qui possède ce socket, la seul technique que j'ai trouvé c'est de faire une boucle dans tout mes clients. (clients est une liste qui contient tous mes clients,clients[i]->socket() retourne un pointeur vers le ClientSocket)

Code C/C++ :

Client *client=NULL;

for (int i = 0; i < clients.size(); i++)
 {
     if(socket->socketDescriptor() == clients[i]->socket()->socketDescriptor())
     {
         client=clients[i];
     }
}


cette solution fonctionne, mais je pense qu'elle n'est pas du tout optimisé, je cherche donc une meilleur façon de faire!!

merci de votre lecture




jeudi 22 juillet 2010 à 11:52:42 | Re : optimisation de code, liens entre objets

vecchio56

Administrateur CodeS-SourceS

Déjà, tu peux optimiser en arrêtant ta boucle quand tu as trouvé un résultat.
Si ton nombre de clients n'est pas très grand (disons inférieur à 20), ta méthode ne me choque pas.
Par contre si tu as beaucoup de clients, tu as intérêt à utiliser une map<ClientSocket*, Client*>, qui va te permettre de retrouver facilement ton Client à partir de ton ClientSocket.
L'accès dans une map est en O(log n) contre O(n) pour ton algo actuel.

_____________________________________
Un éditeur de ressources gratuit pour Windows
jeudi 22 juillet 2010 à 12:09:32 | Re : optimisation de code, liens entre objets

szambaux


Avez vous un exemple d'utilisation des maps?

Code C/C++ :

typedef std::map<ClientSocket*, Client*> listeClient;

int main ()
{
  listeClient lc;

//je rempli ma liste

  lc::iterator it;


 for (it = a.begin (); it != a.end (); ++it)
    {
      ClientSocket *socket = (*it).first;

      Client *client = (*it).second;

     //si je connais le socket comment je fais pour récupérer le client

    }

jeudi 22 juillet 2010 à 12:14:13 | Re : optimisation de code, liens entre objets

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
L'intérêt c'est justement de ne plus faire de boucle.

Code C/C++ :
typedef std::map<ClientSocket*, Client*> listeClient;
int main ()
{
  listeClient lc;

  ClientSocket* s = ???;

  // recherche du client correspondant à s
  lc::iterator it = lc.find(s);
  if(it != lc.end())
  {
    // client trouvé
    // client = it->second;
  }
  else
  {
    // client non trouvé
  }
}



_____________________________________
Un éditeur de ressources gratuit pour Windows
jeudi 22 juillet 2010 à 12:17:29 | Re : optimisation de code, liens entre objets

szambaux

oula, ca à l'air magique :) comment j'ai pus m'en passer avant :) merci


Cette discussion est classée dans : cherche, code, client, socket, clients


Répondre à ce message

Sujets en rapport avec ce message

programmation socket sous linux [ par blazman34 ] Bonjour à tous !!Voici mon probleme :Je suis en train de programmer une application client serveur sous linux, tout a bien marcher juska présent juska Timeout TCP [ par alexixlebaulois ] Bonjour,j'ai un gros problème dans mon prog: j'ai plusieurs threads qui communiquent en même temps avec des logiciels externes pour récolter des stats problème de gestion de plusieurs clients [ par joeblack59 ] j'ai téléchargé un programme sur ce site qui permet d'envoyer des messages entre un client et un serveur sous Windows.Ce programme est celui à la page Client -> Serveur [ par norton ] Bonjour à tous. N'étant pas encore assez expérimenté dans le domaine des sockets je vous demande conseil.Je code sous Borland Builder C++ 6 avec les S Socket probléme [ par andoid ] Bonjour j'ai un serveur avec deux clients multijoueur differents j'ai utilisé select.. Mon probleme est lorsqu'un client place un joueur les autres cl Thread & Socket [ par katerson ] Bonjour tout le monde! Je travaille actuellement sur un projet serveur/client sur UDP. Mon serveur comporte 3 threads qui doivent scruter (indépenda client serveur [ par amenesca ] Bonjour,Généralement ,c'est le serveur qui écoute les sockets provenant des clients.Mais,si on veut que mème les autres clients connectés regardent le bsr je cherche un code de jeux sudoko avec c [ par sassi1985 ] bsr je cherche un code de jeux sudoko avec c Client/Server [ par andoid ] Bonjour J'ai un serveur C paralélle qui gérent plusieurs clients pour une partie de jeu de pions, mon probléme est que je veut que les clients puissen dns socket server client distants [ par Snyps ] Bonjour, Je galère avec les sockets. J'ai créé un server et un client qui se connectent en local. Pas de soucis. Mais comment faire pour ce qui est


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales