Actions en répétition Serverside
#1
Bonjour.

Je suis depuis plusieurs mois sur la création d'un jeu de gestion par navigateur. Je suis parti de zéro en langage web et je me forme donc au fil des obstacles rencontré et reprenant de zéro si nécessaire (tant qu'on a la motivation, tout va bien). Mais je reste peut sûr de moi et me questionne toujours sur la pertinence de mes choix techniques. Aujourd'hui, je me heurte à un problème de taille (pour moi en tout cas). Ce pourquoi je suis ici.

Voici mon problème :

Le joueur possède des trains et lors de sa connexion programme les trajets de ces dit trains à la minute près (Le jeu est en temps réel donc Paris-Lyon: 2h) , étant multijoueur la fréquentation des trains dépend du nombre de trains concurrent sur la même ligne et sur la même tranche horaire (et d'autres facteurs sans importance pour ce topic).
Je dispose d'un cron toutes les heures (si on peut dire ça comme ça).

J'ai pensé exécuter toutes les heures un script qui boucle toute les minutes (avec la fonction date() ) pendant une heure et calcul les départs et arrivés de trains et les quantités de biens et de passagers encore en attente.
Est-ce pertinent ? Est-ce trop lourd pour le serveur ? y'a-t-il plus efficace ?

j’espère ne pas poser de question trop évidente et merci de m'accorder un peu de votre temps.
Répondre
#2
Salut,

la question étant récurrente, je t'invite à lire https://toile.reinom.com/eviter-les-tach...a-seconde/ 2
Si t'as des questions ensuite, n'hésite pas à commenter ou à les poser ici: j'enrichirai l'article en fonction de ces nouveaux retours.
Répondre
#3
Merci de ta réponse rapide.

Ton blog est extrêmement intéressant et répond à de nombreuses questions que je me posai.

Juste une question un peu tordue, peut-on dire, avec le fonctionnement en différé, que la connexion d'un utilisateur est en quelque sorte un cron aléatoire ? 2
Répondre
#4
C'est l'idée, oui. D'où le fait de garder le cron horaire pour s'assurer d'un minimum de fréquence: je ne l'avais pas fait sur la v0 d'ECLERD, et cela a créé de trop gros "trous" dans les simulations.
Mais ce n'est pas tout à fait un CRON comme un autre car il ne s'agit souvent que de simuler ce qui concerne le joueur (on peut simuler toute la planète de jeu, mais là, on atteindra un autre problème: la puissance du serveur peut ne plus être suffisante).
Répondre
#5
Question : Le script qui s’exécute lors de la connexion d'un utilisateur ne doit s’exécuter qu'a sa connexion ou peut-il être reexécuter à chaque chargement de page ? Si j'ai bien compris, c'est les requêtes SQL qui prennent de la place donc cela ne risque-t-il pas de surcharger le serveur ?

Une autre plus naïve peut-être : le fait d'utiliser un daemon ne permet-il pas de répartir la charge de travail du serveur dans le temps ?
Répondre
#6
Tout dépend de ce que ton script "résout". Perso, sur la v0 d'ECLERD, j'ai un script simulant un ensemble de régions du globe. Je lui passe donc la région dirigée par le joueur et éventuellement d'autres régions du globe au hasard (celles simulées depuis le moins longtemps).
Après, le script va tout simplement ne rien faire si une région a été simulé il y a peu.

Si tu n'as pas de métrique, tu ne peux pas dire "ça surchargera le serveur". Fais au plus simple. Pour ma part, la nouvelle mouture d'ECLERD possèdera une fonction de simulation (comme la v0), mais celle-ci est maintenant 100% coté SQL (en procédure stocké) et se chargera de ne simuler des choses que s'il y a besoin. Elle sera donc appelable sans soucis à chaque page (j'aurai laaaargement le temps "d'améliorer" [d'adapter] cela un jour si le serveur SQL rame).

De toute façon, ne prévois jamais une archi (ou un truc quelconque) compliqué pour de simples défauts de performances: le temps de finir ton jeu, les machines auront évoluées. A défaut, t'ajouteras 10€ pour l'année, et c'est réglé (d'autant que si le serveur rame, c'est que t'as du monde, donc des gens qui pourront te soutenir et t'aider à financer le jeu).

Pour ma part, le démon ne sert qu'à éviter de trop gros gouffres entre deux simulations (ou à simuler du tour par tour si tu fais ce gameplay-là). Un démon qui tourne H24 pour faire tes trucs, c'est du temps réel, et c'est très chiant à faire sur du web amateur (il va te falloir des technos adaptées, parce que franchement PHP n'est pas terrible pour cela et le JS et ses events est bien plus pratique, un hébergeur/gement adapté, un mécanisme de backup, voire de redondance, bref, je trouve ça pesant au possible, à moins que ce n'en soit déjà ton métier).
Répondre
#7
Merci de ton aide. J'ai cogité pendent quelque mois et le résultat est, à mes yeux, simple et satisfaisant comparé à la mélasse que je me projetai au début.
Je pense que je reviendrais bientôt avec mes questions tordues, car je suis loin d'avoir fini.
Répondre




Utilisateur(s) parcourant ce sujet : 1 visiteur(s)