[R�seau] Performance des sockets c++
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:
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:
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:
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:
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