Vous n'avez besoin que d'environ 30 mises à jour (ou encore moins peut-être 10 ou 20) par seconde. interpoler les positions des objets en mouvement côté client. En général, vous ne devez envoyer des données que lorsqu'elles sont VRAIMENT nécessaires. Dans WoW, vous pourriez recevoir plus de mises à jour des joueurs avec lesquels vous êtes dans un groupe que des joueurs qui sont au même endroit. De plus, si un autre joueur est loin de vous, vous ne recevez pas autant de mises à jour par seconde à son sujet.
Ensuite, n'envoyez qu'un instantané complet à chaque joueur lorsqu'il se connecte. Après cela, envoyez uniquement les modifications des objets du jeu. Si aucun changement ne s'est produit, ne l'envoyez pas.
Ensuite, faites un usage intensif de BitVectors ou comment vous pourriez les appeler pour réduire la quantité de données inutiles! Exemple: Vous pouvez également essayer d'écrire un flottant en utilisant un seul octet (dans une plage de 0 à 1 ou -1 à 1) afin de n'avoir que 256 ou 128 valeurs différentes. Mais le joueur ne remarquera aucun mouvement saccadé grâce aux interpolations.
Regardez ceci pour un exemple avec LidgrenLibrary sur la façon de compresser les données: http://code.google.com/p/lidgren-network-gen3/wiki/Optimization
Suivant: Essayez de réduire le rayon de vision des joueurs lorsqu'ils se déplacent et ne transmettez que des informations importantes à ce moment-là. Puis, lorsqu'ils s'arrêtent, augmentez à nouveau leur rayon de vue. Vous pouvez utiliser un système de hachage spatial ou un arbre bsp pour réduire la surcharge de recherche d'objets qui sont "à portée". Ceci est une bonne lecture pour le sujet: http://en.wikipedia.org/wiki/Collision_detection
Compressez également les données VOUS-MÊME seulement VOUS connaissez la structure des données et la cohérence temporelle des données (qui peuvent et doivent être exploitées). Un algorithme général tel que Bzip2, Deflate, peu importe, devrait être utilisé, mais seulement comme étape finale de compression!
En outre, pour les informations non essentielles au jeu, vous pouvez également utiliser des techniques P2P supplémentaires. Exemple: Un joueur joue l'animation "bonjour" (juste un effet graphique) Le joueur envoie ces informations au serveur, mais le serveur ne transmet pas les informations aux autres joueurs. Au lieu de cela, cet effet non critique est envoyé par le joueur lui-même aux autres clients à portée.
EDIT (à cause du commentaire):
Méthodes supplémentaires pour diminuer le nombre moyen de bits par seconde pour chaque joueur:
Vous avez écrit que vous envoyez "L'objet n'a pas changé". Il n'y a aucune raison de le faire. Si vous vous inquiétez de la perte de paquets (et de la désynchronisation de votre simulation à cause de cela), tenez compte des points suivants: à chaque pas de temps fixe (ex. 100, 200, 300, 400 ...) hachez l'état de simulation et envoyez-le au serveur . le serveur confirme ou renvoie un instantané complet de toutes les données.
Pour des choses comme des roquettes ou même des joueurs, vous pouvez utiliser non seulement l'interpolation mais aussi l'extrapolation afin de rendre la simulation plus réaliste. Exemple 'Rocket': Au lieu de mettre à jour avec des messages comme "Est maintenant à la position x", il suffit d'envoyer un message contenant les informations suivantes: "Rocket Spawned: position (vector), Time (à quelle étape de simulation la fusée a été générée), velocity ( vecteur)". Vous n'avez donc même pas besoin d'inclure la rotation car la pointe sera toujours dans le sens "vitesse".
Combinez plusieurs commandes dans un même message et n'envoyez jamais de messages inférieurs à 16-20 octets car l'en-tête udp sera plus grand que le message lui-même. N'envoyez pas non plus de paquets plus grands que le MTU de votre protocole car la fragmentation ralentira la vitesse de transmission.