Eh bien, il y a ce livre - qui est un peu vieux maintenant, et je ne l'ai jamais vraiment lu, mais il vient d'un éditeur réputé. J'ai également trouvé celui-ci , qui est plus récent, mais je n'en ai jamais entendu parler auparavant. Les deux prétendent couvrir les problèmes de développement de jeux MMO (ou au moins en ligne); Cela dit, la prédiction côté client est plus ou moins la même quelle que soit l'échelle de votre base de joueurs simultanés, et Google a beaucoup d'informations à ce sujet .
Il est important de réaliser que d'un point de vue pratique, il est assez difficile pour un développeur indépendant / amateur de créer un jeu qui sera suffisamment populaire pour même attirer suffisamment de joueurs pour atteindre un pic de concurrence théorique suffisamment élevé pour être considéré comme "massif". Mais les techniques peuvent encore être pédagogiques à la recherche.
Il existe deux grandes catégories de choses que vous pouvez faire:
- Soyez agressif en envoyant uniquement la quantité minimale de données à l'ensemble minimal de clients qui en ont besoin.
- Concevez un jeu qui n'incite pas les joueurs à se regrouper trop, vous aidant à garder "l'ensemble des clients qui ont besoin" de petites choses en général.
Le second est vraiment un problème de conception de jeu et de manipulation sociale - c'est particulièrement délicat parce que les jeux multijoueurs sont naturellement sociaux, cela fait partie de leur attrait, donc vous ne voulez pas trop décourager les groupes de joueurs. D'un autre côté, un jeu où tout le monde dans le monde fraye du camping le seul gars qui lâche le meilleur butin du jeu sera difficile à mettre à l'échelle.
Pour la première option, vous pourriez envisager de faire de la messagerie à plusieurs niveaux - il y a des choses sur les autres joueurs qui sont toujours importantes à savoir, comme les positions. Mais d'autres choses, comme la santé, peuvent ne pas être aussi importantes pour les objets que le joueur actuel ne peut pas encore voir, donc vous transmettez ce que vous envoyez à ce joueur en fonction de la distance relative de toutes les autres entités à proximité - c'est essentiellement une limitation les données que vous envoyez, comme vous l'avez mentionné dans la dernière partie de votre question, ainsi que leur filtrage.
Les architectures multijoueurs à très grande échelle tamponneront également les rapports qui n'ont pas besoin de prendre des mesures immédiates. Les messages de sauvegarde de caractères envoyés au serveur peuvent être effectués en deltas, avec des mises à jour complètes uniquement aux points critiques, et ces mises à jour peuvent être mises en mémoire tampon sur un serveur de limitation afin qu'elles soient envoyées au serveur qui contient réellement les données de caractères de manière stable, mode périodique - à mesure que votre base de joueurs évolue, vous devez vous soucier de l'optimisation des E / S disque ainsi que du trafic réseau. Vous ne voulez pas provoquer le débordement de votre base de données de personnages.
Le taux et la taille des paquets diffèrent largement d'un jeu à l'autre, tout comme pour les jeux non MMO. C'est vraiment une chose très spécifique aux exigences et il n'y a pas de normes généralisées.
En plus de la réponse ci-dessus, consultez TCP_NODELAY et le fonctionnement de la mise à l'échelle des fenêtres. Comprendre les détails de TCP (et oui, vous voulez utiliser TCP et non UDP sauf si la perspective de gérer des mises à jour différentielles arrivant en panne vous semble amusant) et la retransmission est essentielle pour le contrôle de la latence.
la source