Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu] Atteindre le backlog d'une Socket TCP ?  (Lu 1999 fois)

0 Membres et 1 Invité sur ce sujet

Gorf

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
    • E-mail
[Résolu] Atteindre le backlog d'une Socket TCP ?
« 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
« Modifié: Août 27, 2015, 06:39:22 pm par Gorf »
Bouffer du code c'est sain et plein de protéines !

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Atteindre le backlog d'une Socket TCP ?
« Réponse #1 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é?
Laurent Gomila - SFML developer

Gorf

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
    • E-mail
Re : Atteindre le backlog d'une Socket TCP ?
« Réponse #2 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 !
Bouffer du code c'est sain et plein de protéines !