Dans les jeux en ligne, les gens préfèrent se connecter et se déconnecter quand ils le souhaitent. Habituellement, leurs réalisations de jeu sont enregistrées de manière transparente sur le serveur. Ce n'est pas si difficile à réaliser, mais je me demande comment faire de manière efficace, logique et à grande échelle.
Est-il judicieux d'enregistrer les coordonnées et l'état du joueur à chaque fois qu'il l'envoie? Mon serveur node.js peut le faire facilement sans bloquer une réponse, et je veux utiliser une base de données Mongo, mais peut-être qu'il est plus approprié de le faire une fois par seconde et dans un événement à l'échelle du serveur, en collectant tout à la fois?
Réponses:
Je pense à un MMORPG traditionnel comme World of Warcraft.
Sauvegardez après chaque commande de chaque joueur et chose autonome (par exemple NPC)
Tout sauvegarder périodiquement
Enregistrez un personnage à la déconnexion (ne sauvegardez rien d'autre)
Pensées de clôture
Enfin, ne prenez pas ce conseil comme une vérité absolue. Je n'ai pas écrit de système de sauvegarde multijoueur. Je suis travaille sur un « jeu » en ligne, ce qui est la raison pour laquelle je l' ai pensé à cela et écrit mes pensées au- dessus, mais je ne l' ai pas obtenu à l'étape de la mise en œuvre pour l'instant. Donc, cela est écrit sans expérience réelle, mais après beaucoup de lecture et de collecte de connaissances sur le sujet.
la source
Je suppose que cela dépend du type de jeu et de la quantité de trafic entre les joueurs et le serveur.
Dans un MMORPG, cela n'aurait aucun sens de sauvegarder la position des joueurs chaque fois qu'ils envoient les informations au serveur. Il serait plus logique de mettre à jour lorsque les données actuelles du joueur sont «périmées», pour ainsi dire. Il pourrait également être utile de sauvegarder l'état du joueur lors d'événements majeurs tels que la traversée d'un nouveau territoire, la défaite d'un boss ou la sortie d'un magasin.
Dans un jeu au tour par tour, il serait certainement judicieux de sauvegarder l'état du joueur à chaque fois qu'il termine son tour ainsi qu'après le tour d'un joueur adverse (enregistrer la perte de santé, les effets des sorts, etc.).
Encore une fois, la réponse dépend entièrement de l'échelle et des capacités de votre serveur. Il s'agit de trouver le meilleur équilibre et d'optimiser autant que possible sans sacrifier la qualité.
la source
Si votre seule préoccupation est quand ils se déconnectent, alors une réponse simple est de sauvegarder leur position lorsque les conditions pour eux qui n'existent plus dans le monde du jeu (en raison d'une déconnexion ou d'une déconnexion) se produisent.
Sur une note secondaire cependant, je me méfierais un peu du fait que le client signale au serveur sa position, ou tout au moins sans une forme de vérification de l'intégrité du côté serveur. Si vous avez déjà cela en place, vous pouvez probablement enregistrer cette position lors de la déconnexion ou de la déconnexion, car vous n'avez pas à vous soucier d'obtenir directement des données du client.
la source