Quelques problèmes liés à l'architecture du serveur de jeu et à l'optimisation des performances

Question 1: Pourquoi y a-t-il un décalage dans le jeu avec trop d'utilisateurs en ligne? Matériel serveur ou réseau ou autres raisons?

Réponse: De nombreuses raisons doivent être analysées selon différentes situations:

1. Les performances du téléphone mobile ou de l'ordinateur ne sont pas bonnes, le client lui-même se bloque et le fps est très bas;

2. Les problèmes du réseau lui-même, tels que la perte de paquets, une latence élevée ou un réseau faible pendant les jeux mobiles, provoqueront le gel du client, comme le passage aux chrysanthèmes;

3. La charge du serveur est élevée et les performances sont dégradées, ce qui rend impossible le traitement rapide des demandes des clients. Il se peut que le matériel du serveur lui-même doive être mis à niveau. En revanche, le débit du programme lui-même ne suffit pas, les performances sont faibles et il peut y avoir des problèmes d'architecture. Par exemple, sans traitement distribué, l'expansion dynamique est impossible.

Question 2: Lorsqu'un jeu atteint le milieu et la fin de sa vie, il doit souvent effectuer un grand nombre d'opérations de fermeture de zone Quelle est la meilleure solution pour la fermeture fréquente de zone?

Réponse: Vous pouvez utiliser une architecture de serveur dans laquelle la couche de stockage est entièrement desservie dans toute la région, et la couche d'accès et la couche logique sont partitionnées pour éviter le coût du traitement des données pendant la conformité. Pour faire simple, la couche de stockage doit être gérée de manière unifiée et non isolée pour garantir que les serveurs de jeu dans différentes zones du front-end puissent accéder aux données de base de n'importe quelle zone. La couche d'accès et la couche logique sont divisées en cellules, permettant aux joueurs de jouer sur différents serveurs.

Le mode DB global central peut être adopté, et le service ne nécessite aucune opération DB, juste quelques changements de configuration, qui peuvent être automatisés.

Question 3: Synchronisation d'état ou synchronisation de trame, comment assurer une communication fluide? Pour les jeux de combat en temps réel, si vous concevez un mécanisme de synchronisation, tel que la synchronisation d'état et la synchronisation de trame, comment assurer une communication fluide du point de vue du serveur?

Réponse: En ce qui concerne la communication, il est recommandé de sélectionner UDP comme protocole, de contrôler la taille des paquets en dessous de 576 octets, de sélectionner UDP fiable pour les informations importantes et d'utiliser UDP non fiable pour les informations sans importance. Compte tenu de la perte de paquets, un schéma de redondance peut être adopté, et le client choisit l'accès à certains produits accélérés.
image

Question 4: Demandez si l'IA est implémentée sur le client ou le serveur? Le client effectue-t-il un pont de synchronisation ou écrit-il directement sur le serveur et compte-t-il sur le serveur pour se synchroniser avec tous les clients?

Réponse: Il est lié au schéma de synchronisation sélectionné par le jeu. Par exemple, le roi utilise la synchronisation de trame et le calcul de l'IA est placé sur le client. Le serveur d'ouverture envoie une graine de nombre aléatoire au client. Basé sur la même graine, selon le numéro de trame, chaque client Un état AI cohérent peut être calculé.Cette pièce d'anti-plugin peut être effectuée par le serveur vérifiant ponctuellement si les résultats de calcul de chaque client sont cohérents. Il existe également de nombreux jeux, tels que Inverse War, Sky Sword, Contra, etc. qui utilisent la synchronisation d'état, les calculs d'IA sont placés sur le serveur et le traitement des collisions 3D est également placé sur le serveur. Cette zone a quelques optimisations en profondeur .

Question 5: Quelques petites questions sur UDP

1. Comment l'UDP de King's Glory est-il réalisé? UDP + EPOLL ou multithreading?

2. Comment UDP garantit-il la fiabilité? Comment faites-vous spécifiquement la redondance?

3. Les données envoyées par le serveur doivent-elles être mises en cache? Combien est approprié s'il s'agit de cache

4. Que faire si le paquet envoyé au client est perdu et que le paquet est mis en mémoire tampon lorsque le tampon d'envoi est plein?

5. Les données de combat seront-elles mises en cache côté serveur?

6. Le serveur effectue-t-il des calculs? La synchronisation d'image est-elle utilisée?

Réponse: Je n'ai pas participé au projet King. J'ai obtenu des informations d'autres chaînes, qui peuvent ne pas être exactes. Pour référence:

1. Le composant UDP du département R&D de Huyu Entertainment est utilisé, UDP non fiable, UDP + EPOLL est suffisant, aucun multi-threading n'est requis;

2. UDP fiable n'est pas utilisé, et l'efficacité est relativement faible. Il est garanti par la redondance. La manière spécifique est que les paquets UDP suivants seront redondants à une certaine quantité de paquets UDP précédemment envoyés, par exemple, en attente de la réponse de le paquet udp précédent Pendant cette période, les paquets udp suivants attachent les paquets précédents sans réponse, qui peuvent être redondants selon la situation, jusqu'à ce que la réponse précédente soit reçue, ce qui est un moyen d'échanger de l'efficacité par le trafic;

3. Je ne comprends pas ce que vous entendez par ce cache. Lorsque la trame est synchronisée, leur serveur enverra le client en parallèle. Par exemple, si le client a 30 trames, le serveur enverra 15 trames; 2 et 1;

4. L'augmentation du cache peut atténuer le problème, mais ce n'est pas une solution. Il est nécessaire d'analyser pourquoi cette situation se produit, indiquant qu'il y a un problème avec la conception. Certains joueurs ont des problèmes avec le réseau, vous devez donc sacrifier l'expérience de jeu des joueurs avec des réseaux pauvres. Donner la priorité à l'assurance de l'expérience de jeu des joueurs avec de bons réseaux, ainsi certains joueurs ne répondent pas pendant longtemps, et le paquet est perdu s'ils sont perdus, quelle que soit leur expérience de jeu;

5. Ils utilisent la synchronisation de trame, le serveur effectuera une certaine vérification, mais n'exécutera pas la logique de jeu complète, afin d'anti-brancher, vous pouvez contourner un serveur de vérification complet, vous devez exécuter la logique de jeu complète;

6. Voir 5.

image

Question 6: Quelle est la meilleure solution pour le problème de concurrence d'accès à la connexion? Il est lié aux aspects de traitement suivants.

1. Lecture simultanée des données.

2. Mise en cache des données.

3. Corps de l'emballage.

4. Cache réseau.

5. Structure de l'organisation du serveur.

6. Le plan de crash.

répondre:

1. Le stockage distribué, ou la base de données populaire nosql, prend en charge la lecture simultanée massive;

2. Le cache est essentiel, même un cache multi-niveaux peut être adopté;

3. Je ne comprends pas ce que cela signifie. Cela signifie-t-il que le corps du paquet est trop grand? Peut être compressé

4. Les exigences relatives à la couche d'accès sont relativement élevées: désormais, la couche d'accès frontale du serveur est indépendante et peut être résolue en utilisant une solution distribuée;

5. L'architecture du serveur pour les services massifs doit être étendue par chaque module, il n'y a pas de point unique de goulot d'étranglement et il doit y avoir un meilleur mécanisme d'équilibrage de charge;

6. Des services à haute disponibilité et avec perte peuvent être adoptés, c'est-à-dire que le crash d'un serveur n'affecte pas les personnes des autres serveurs, minimise l'impact et peut rapidement restaurer, impliquant la surveillance, l'alarme, la sauvegarde et l'ajustement dynamique;

Par exemple, le serveur massif de Tencent a son propre ensemble de méthodologie et de plans d'atterrissage, qu'il s'agisse de jeux ou d'autres services Internet, vous pouvez le google: «L'approche de service massif de Tencent», il existe de nombreux articles sur Internet.

Question 7: Quelles technologies dois-je apprendre lors de l'apprentissage de la programmation de serveurs de jeux?

Réponse: Prenons l'exemple du serveur de jeu de Tencent. Les principales connaissances et compétences sont les suivantes:

1. Système d'exploitation: Il est principalement basé sur unix / linux, vous devez donc vous familiariser avec le système d'exploitation. Vous pouvez passer de la compréhension préliminaire à l'utilisation à une étude approfondie. Certains livres sont recommandés: "Linux Beginner's Guide", "Exploration en profondeur" Système d'exploitation Linux: Construction du système et analyse des principes "," Ligne de commande LINUX et encyclopédie de programmation de scripts shell "," Compréhension approfondie des systèmes informatiques (livre original 2ème édition) "," Programmation d'environnement avancé Unix ", etc. ., l'essentiel est de faire plus;

2. Langages de programmation: C / C ++, lua, python Tencent utilise java et d’autres langages de programmation côté serveur, donc je n’en dirai pas plus à ce sujet;

3. Programmation réseau: Volume 1 ou 2 des "Principes du protocole TCP / IP", Volume 1 ou 2 de "Programmation réseau Unix";

4. Base de données: base de données relationnelle mysql, maintenant la base de données nosql plus populaire devrait être familière, il existe de nombreux open source;

5. Modèles de conception, orientés objet, etc .;

Si vous souhaitez vous impliquer plus profondément dans le développement de jeux, il est préférable de pouvoir comprendre les connaissances et les compétences de développement liées au client du jeu, afin de ne pas vouloir être plus impliqué;

Familier avec ces connaissances et compétences, il n'y a pratiquement aucun problème à s'engager dans le développement back-end du jeu. Il est plus important de participer à des projets d'expérience, de comprendre l'architecture back-end et le processus de développement, ainsi que la manière d'interagir avec le client et étudiants en planification et en exploitation Exercice, étude et résumé du combat réel du projet.

Enfin: diffusion en direct les 13 et 14 janvier 2021: cadre du serveur de jeu - Le camp d'entraînement skynet de Yunfeng
est maintenant ouvert aux inscriptions. Les personnes intéressées peuvent s'abonner et
se réjouir de partager l'événement technologique
avec vous. Avec les captures d'écran d'inscription Rejoignez le groupe 812855908 pour recevoir l'enregistrement et la diffusion du dernier camp d'entraînement skynet et les avant-premières de cette période!
Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_40989769/article/details/112277900
conseillé
Classement