Forum de la communauté SFML

Aide => Réseau => Discussion démarrée par: Gorf le Août 27, 2015, 01:05:10 am

Titre: [Résolu] Atteindre le backlog d'une Socket TCP ?
Posté par: Gorf le Août 27, 2015, 01:05:10 am
Bonjour à tous.
J'écris un jeu en multijoueur. Lorsqu'un joueur souhaite se déplacer, il envoie un message de "requête" au serveur, qui va s'occuper des calculs physiques correspondants. Ensuite le serveur va périodiquement redistribuer les positions des joueurs à ceux-ci.
Le serveur est donc super important ! Le problème c'est que dans ce jeu on aura tendance à se déplacer *très* souvent, et j'ai cru observer un amoncellement de backlog sur mes sockets côté serveur. Du coup, le serveur perd du temps à traiter des vieilles demandes ce qui accroît le lag. Et c'est pas top.
Voilà donc ma question :

 Y'a t-il un moyen d'accéder à ce backlog et de supprimer/ignorer des paquets plutôt rapidement ?

J'ai pensé à implémenter une clock 25 Hz qui limite la fréquence des demandes mais ça semble toujours ralentir, et se déplacer à 25 Hz c'est déjà assez limite je trouve.

Merci infiniment pour votre temps et bonne journée/nuit ! ^^

EDIT : Encore une fois j'ai oublié ma config : SFML 2.1 mais prêt à upgrader, Windows 8 64bit
Titre: Re : Atteindre le backlog d'une Socket TCP ?
Posté par: Laurent le Août 27, 2015, 07:57:27 am
Non, il n'y a pas moyen d'accéder au backlog de la socket.

Mais à mon avis ton approche est mauvaise. Tu ne devrais jamais avoir à envoyer autant de données sur le réseau. 25 Hz pour du déplacement c'est énorme. Plutôt que de traffiquer la socket, essaye plutôt de penser à des algorithmes qui te permettent de limiter l'envoi de commandes au serveur. Par exemple, un joueur ne va jamais changer son déplacement 25 fois par seconde. Pourquoi ne pourrais-tu donc pas envoyer uniquement les changements (de direction de déplacement) et faire de l'extrapolation de l'autre côté?
Titre: Re : Atteindre le backlog d'une Socket TCP ?
Posté par: Gorf le Août 27, 2015, 06:38:55 pm
Merci beaucoup pour ta réponse rapide !
Oui cette idée est très bonne, merci !
En fait il s'agit d'un jeu de course en réseau, mon premier modèle était que les clients envoie des messages au serveur pour commander des impulsions physiques sur leurs personnages. Dans un jeu de course je pensais qu'une certaine précision de mouvement était importante, mais bon je vais tenter de baisser la clock vers 5 Hz, ça devrait le faire.

Du coup je vais garder en mémoire côté serveur le vecteur déplacement demandé et appliquer l'impulsion physique régulièrement.

Merci beaucoup, encore ! J'avais besoin de finir ce jeu très vite, disons que j'ai un truc de style Mémoire, mais niveau licée dont je dois rendre un brouillon complet dans 4 jours ! Au boulot, donc !