NodeGame

Retour d'expérience sur le développement d'une plateforme de jeux multi-joueurs et multi-écrans

Sommaire

  • NodeGame
  • Présentation technos
  • Démo

NodeGame

NodeGame

  • 1 écran TV 
  • plusieurs écrans secondaires -> les joueurs
  • pas de store
  • HTML5
    • iPhone, Android, Windows Phone
    • STB, Chromecast, TV connectées
  • Aide au développement
  • nodejs
    • JavaScript coté serveur
    • asynchrone
  • npm
    • npm install (-g)
    • package.json
  • express
    • route
    • middleware
app.get('/user/:id', function (req, res, next) {
  console.log('ID:', req.params.id);
  next();
}, function (req, res, next) {
  res.send('User Info');
});
  • PAAS
  • OpenShift sur OrangeBeta
  • RHC
  • DevOps
  • Serveurs :
    • Node.js, Tomcat, PHP, Ruby...
  • BDD :
    • MongoDB, MySQL, Postgre, Redis...
  • git push
  • variable d'environnement
  • rhc ssh MyApp
  • Alias -> visibilité sur Internet

WebSocket

  • socket.io
    • s'abstraire des différentes implémentations
    • fallback possible vers Flash socket, JSONP et Ajax polling
    • broadcast, room
  • seules les WSS compatibles avec proxy Orange
  • fonctionne sous Kermit avec un petit hack
var socket = io('http://localhost');
socket.on('news', function (data) {
    socket.emit('my other event', { my: 'data' }); 
}); 
  • NoSQL

  • stockage JSON sous forme de collection

  • CRUD

  • schéma

  • model

    • find, findById

    • save, remove, update

    • populate

var InvitationModel = mongoose.model("invitation", {
	user: { type: mongoose.Schema.Types.ObjectId, ref: 'user' },
	key: { type: String, required: true, unique: true, index: true },
	createdAt: { type: Date, default: Date.now, expires: '24h'},
	color: { type: String, enum: ["green", "orange", "red"], required: true },
	data: { type: mongoose.Schema.Types.Mixed },
});
  • se branche sur express

  • collections, get, put, post, delete...

  • vérification champs obligatoires ou sur le type

  • requête de recherche

  • populate

  • middleware

GET http://localhost/api/v1/Customers/count
GET http://localhost/api/v1/Customers?name=value
GET http://localhost/api/v1/Invoices?populate=customer&select=customer.name
GET http://localhost/api/v1/Customers/:id
PUT http://localhost/api/v1/Customers/:id
POST http://localhost/api/v1/Customers/:id
DELETE http://localhost/api/v1/Customers/:id
  • MVVM 

  • ES5 (getter, setter) donc incompatible avec IE8 

  • two way data bindings

  • simple, léger et performant

  • exemple

  • sur-ensemble de JavaScript
  • proche de ES6
  • typage
  • classe, interface, module
  • compilation
  • émulation (touche escape)
  • remote debugging
  • sur chrome et webview
  • chrome://inspect
  • redirection de port

Démo !!!

NodeGame

By Jonathan Gourdin