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
- 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
NodeGame
- 856