Bonjour � tous
Je travaille actuellement � l'�laboration d'un jeu 3D en C++.
Simplifions en disant qu'il s'agit d'une sorte de bataille navale � N joueurs
J'ai un vrai souci vis � vis des sockets winsock qui permettent de g�rer les aspects r�seaux (TCP, recv non bloquants)

a) En effet, le process principal (le main) est g�r� par GlutMainLoop()
b) Parall�lement en mode Server, un Thread de priorit� THREAD_PRIORITY_BELOW_NORMAL permet de g�rer l'attente des connexions TCP

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
 
while(1)
{
  if(accept(premier_slot_disponible))
     ...
}
c) D�s que la premi�re connexion est enregistr�e, un thread de priorit� THREAD_PRIORITY_BELOW_NORMAL permet c�t� Serveur de faire des receive non bloquants sur tous les slots r�seau libres
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
 
while(1)
{
   for(int i = 0 ; i < nbConnectes ; i++)
   {
      recv(slot[i],buffer);
      if(strlen(buffer) != 0)
                Redispatch(i,buffer) // renvoie l'info à tous les clients
   }
}
d) C�t� client, deux threads priorit� THREAD_PRIORITY_BELOW_NORMAL g�rent
- l'envoi des messages

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
while(1)
{
  switch(dataToSend)
  {
  case CHAT:
     send(server,...)
     break;
  case UNITY_MOVED:
     send(server,...)
  break;
  default:;
}
-la r�ception des messages
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
 
while(1)    
{
    recv(socket, buffer)
    if(strlen(buffer)) 
       Traitement(buffer);
}
L'ensemble marche bien mais les traitements r�seaux sont tr�s lents. Lorsque je teste 1 ou 2 instances de l'exe sur la m�me machine, en r�seau local (127.0.0.1), plusieurs secondes peuvent passer entre l'envoi de la donn�e depuis un client (un texte de chat par exemple) et son affichage sur les autres clients
Si j'augmente la priorit� des threads, c'est l'OpenGL qui devient subitement plus lent et le nombre de fps diminue.
Que faire, que changer dans le moteur r�seau ?
Merci d'avance