JeuWeb - Crée ton jeu par navigateur
NodeJS - MVC + temps-réel - Structuration d'application - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : NodeJS - MVC + temps-réel - Structuration d'application (/showthread.php?tid=7045)



NodeJS - MVC + temps-réel - Structuration d'application - Cawrotte - 18-07-2013

Salut tout le monde,

j'essaie de construire une application NodeJS.
Dans le but
  • de m'entraîner avec NodeJS et les frameworks express, socket.io
  • D'apprendre le NoSQL avec MongoDB et Mongoose pour NodeJS
  • Pourquoi pas, de sortir un petit jeu cet été
,
j'aimerais bien faire un petit RPG (pour faire original), parce que j'ai toujours appris la programmation en essayant de faire des RPG. :langue2:

Pour cela, je voudrais structurer cette application de la manière suivante :
  • un serveur (enfin un processus dans le terminal + un port) NodeJS pour le site
  • un serveur NodeJS pour le jeu en temps-réel
  • Une base de données MongoBD

[Image: LZbyuPJ.png]

Si vous voyez BrowserQuest, je voudrais faire un peu la même chose dans l'idée (un jeu temps-réel sans base de données), mais avec une BDD en plus et un site autour.
La première question que je vous pose est à propos de la structuration de l'application. Elle est bien ? Est-ce que je fais quelque chose de travers ?

Ensuite, pour la base de données, je me demande comment organiser le jeu temps-réel.
Dois-je utiliser un modèle MVC ? Comment gérer ça avec Mongoose ?

Je n'arrive pas à me figurer comment mixer le modèle Mongoose et son schéma avec la classe en question qui elle contient des variables, des tableaux contenant des instances d'autres classes...

Par exemple, ma classe Map côté serveur aura un attribut players de type Array contenant toutes les instances de la classe Player sur ladite map...
Mais je ne vois pas comment stocker tout ce bazar proprement en base de données.

Mes propos sont sûrement confus comme je n'ai pas d'expérience avec ces technos mais toute trace d'aide de votre part m'aidera beaucoup.

Merci d'avance ! Smile


RE: NodeJS - MVC + temps-réel - Structuration d'application - Maks - 18-07-2013

Coucou,

Pour organiser ton MVC, j'ai développé un module de 20 lignes : https://github.com/MaksJS/express-simple-mvc
Ca tombe bien il y a tout ce que tu veux, un exemple avec express & mongoose. C'est du coffeescript mais tu peux adapter en Javascript.

Sinon je pense que ta classe Map ne doit pas être fusionnée avec ton modèle. La couche des données et la couche de jeu doivent être séparées.

Pour stocker en base de donnée c'est simple, tu prévoies un toJSON() pour chacune de tes classes et mongo et mongoose feront le reste pour le côté magique.

Enfin en ce qui concerne le site à mon avis tu n'as pas spécialement besoin d'aussi utilisé Node, personnellement j'ai préféré utiliser un langage/technologie différente (plus adaptée, éprouvée et rapide à programmer peut être) et base de donnée différente pour le site. Si c'est pour faire le site sous Node avec un équivalent de Rails ça vaut pas vraiment le coup Wink


RE: NodeJS - MVC + temps-réel - Structuration d'application - Cawrotte - 20-07-2013

Hello, merci beaucoup pour l'aide mais le problème que j'ai est surtout d'organiser le code, les fichiers, etc...
J'avais déjà une bonne base pour un MVC avec Node (j'avais mis le lien), mais je ne vois pas du tout comment mixer une application temps réel avec une base de données concrètement...

Je vais faire des schémas, réfléchir, et je vois si je trouve une piste pour l'exposer et voir ce que vous en pensez Smile


RE: NodeJS - MVC + temps-réel - Structuration d'application - Cawrotte - 20-07-2013

En m'inspirant de ton système de namespaces, j'ai pensé à faire un truc comme ça :

[Image: IfPvfZe.png]

Un seul serveur NodeJS (bien plus simple), et un répertoire /game à côté du MVC qui contiendra des classes liées entre elles pour éviter de solliciter la BDD à chaque demande et faciliter le temps réel.

La communication avec ces classes sera uniquement par sockets.
Il me reste à trouver un moyen de bien organiser l'I/O

Ce dossier contiendra par exemple la classe World qui contiendra dans un de ses attributs toutes les Maps qui elles contiendront des Entity, etc..


RE: NodeJS - MVC + temps-réel - Structuration d'application - Maks - 20-07-2013

ça me parait bien Smile

prévoit un dossier node_modules/ à la racine et vendor/ avec bower par exemple (ce qui t'évitera d'avoir les vendor dans game/ )


RE: NodeJS - MVC + temps-réel - Structuration d'application - Cawrotte - 20-07-2013

J'ai quand même une question sur ton système de MVC : comment tu gères les validateurs, virtuels et cie sur https://github.com/MaksJS/express-simple-mvc/blob/master/example/models/Player.coffee ?


RE: NodeJS - MVC + temps-réel - Structuration d'application - Maks - 20-07-2013

Tu peux les mettre juste en dessous de l'attribut model Wink


class Player

@schema =
pseudo: String
x:
type: Number
default: 0
y:
type: Number
default: 0

@model = mongoose.model 'Player', new mongoose.Schema @schema

@model.schema
.virtual('foo')
.get -> @bar
@model.schema.path('myArray').validate (value) ->
value.length > 0

Par contre je te conseille d'externaliser les schémas des classes pour que ça soit plus clair (prévoir un dossier /db/schema par exemple).


RE: NodeJS - MVC + temps-réel - Structuration d'application - Cawrotte - 21-07-2013

OK merci beaucoup Smile