Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Cocktail temps reel pour l’olympia

552 views

Published on

Conférence donnée lors du Forum PHP 2017

  • Hey guys! Who wants to chat with me? More photos with me here 👉 http://www.bit.ly/katekoxx
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Cocktail temps reel pour l’olympia

  1. 1. COCKTAIL TEMPS-REEL POUR L’OLYMPIA COCKTAIL TEMPS-REEL POUR L’OLYMPIA
  2. 2. Qui suis-je ? Amélie DUVERNET - www.amelieonline.net ● Développeur R&D chez Digitick ● Auto-entrepreneur ● Membre de l’AFUP Marseille-Aix - marseille.afup.org @bonjouramel
  3. 3. Digitick Digitick c’est : ● Leader de la vente de billets en ligne ● Concerts, expositions, musées, sport ... ● Création en 2004 ● 35 millions de billets vendus par an
  4. 4. Digitick : notre métier Avant ● preparatifs pour la vente : vente en ligne ... Pendant ● vente sur place avec guichets ● contrôle d’accès Après ● rapports de vente ● reporting ● comptabilité
  5. 5. Pôle Recherche et Développement ● Développement : outils internes, optimisation performances, couche technique, core ● Expertise : architecture, veille technologique, partage d’experience ● Intégration continue : MEP, déploiement d’outils annexes, intégration continue
  6. 6. LE BESOIN
  7. 7. Besoin client ● Taux temps-reel de remplissage d’une salle ● Afficher les espaces vides dans la salle ● Pouvoir replacer les clients
  8. 8. L’Olympia ... C’est … ● + de 100 ans de spectacles ● + 1700 places ● Les plus grands artistes sur scène UN GROS CLIENT !!! Credit pho to : https: //www.flickr.co m/pho to s/547 00909@ N03/32508 1 7 1 51 2
  9. 9. Enjeux techniques ● Notification temps-réel occupation siège ● Diffuser à des observateurs connectés à des moments differents ● Echelonnabilité (scalabilité) ● Sécurité ● Fiabilité ● Front dynamique ● Performance
  10. 10. La mission ● Afficher le plan de la salle ● Changer l’apparence du siège lors du compostage ● Nombre de personnes ● 5 derniers compostages (notifications)
  11. 11. Les problématiques ● Affichage des sièges déjà compostés ● Temps-réel ● Correspondance spectacle <-> billet ● SÉCURITÉ ! ● Effacement des données
  12. 12. PHP ET TEMPS-REEL ! WHAT ?
  13. 13. CE QUI EXISTAIT
  14. 14. Nos outils internes ● Application embarquée de contrôle d’accès TR ● Communication PHP vers MySQL ● Mise à jour du billet -> composté ● Plan de salle Olympia : Symfony2 + AngularJS
  15. 15. Nous utilisons aussi ... ● RabbitMQ ● Redis ● NodeJS Et nous aurons besoin de : Websockets !
  16. 16. SHAKE IT !
  17. 17. Le cocktail
  18. 18. LES INGREDIENTS
  19. 19. PHP ● Obtention des informations ● Envoi des compostages ● Attribution et vérification des tokens ● Chargement des données du plan
  20. 20. PHP ● Obtention des informations ● Envoi des compostages ● Attribution et vérification des tokens ● Chargement des données du plan SECURITE
  21. 21. Redis ● Stockage des listes de compostage ● Stockage des billets ● Stockage des tokens
  22. 22. Redis ● Stockage des listes de compostage ● Stockage des billets ● Stockage des tokens PERFORMANCE
  23. 23. RabbitMQ ● Notifications au serveur ● Désempilage au fur et à mesure
  24. 24. NodeJS ● Daemon de recupération des compostages ● Acquittement des compostages traités ● Contrôle token securité
  25. 25. Socket.io (serveur) ● Gestion des rooms ● Notification des sockets ● Keep-alive
  26. 26. Socket.io ● Gestion des rooms ● Notification des sockets ● Keep-alive NOTIFICATIONS TEMPS REEL
  27. 27. AngularJS ● Le plan ● Récupération des données ● Connexion websocket ● Initialisation du token-securité ● Gestion des pertes de connexion ● Gestion du numéro d'ordre
  28. 28. AngularJS ● Le plan ● Récupération des données ● Connexion websocket ● Initialisation du token-securité ● Gestion des pertes de connexion ● Gestion du numéro d’ordre FRONTDYNAMIQUE
  29. 29. ENREGISTRER LES COMPOSTAGES
  30. 30. Les données importantes ● Date et heure de compostage ● Code barre du billet ● Nom du bloc ● Rang du siège ● Numero de siège
  31. 31. Nos listes ● Valeurs ordonnées dans un “set” ● Correspondance avec la clé définie ● Récupération avec des intervalles de temps 00012 123 00052 00023 00123 00055 + time() + time() + time() + time() ZADD N° ordre REDIS N° spectacle N° siège
  32. 32. Notre siège ● Infos complémentaires au compostage ● Stockées en HASH dateHeure idSpectacle:idSiege codeBarre nomBloc rangSiege numeroSiege HASH REDIS
  33. 33. RECUPERATION DES COMPOSTAGES
  34. 34. Récupération des compostages Plan RequêteHTTP (+num ordre) Notification 1 Notification 2 Notification 3 Notification 4 Notification 5 Affectés Vendus Compostés++ Redis Notification 6 Interfaced’affichage
  35. 35. ECONOMIE DE RESSOURCES Activation du compostage
  36. 36. Le Token-Activation ● Associé au spectacle ● Stocké dans Redis ● Permet les notifications à RabbitMQ ● Crée par le plan ● Vérifié lors du compostage
  37. 37. LA SECURITE ! Ai-je le droit de voir les compostages de ce plan ?
  38. 38. Token Securité (écoute) Admin 1 - Token xxx 2 3 - Token xxx 4 – Token check
  39. 39. Sur le plan socket.on('connect', function() { dataAccess.get('generateToken', {}, function(success, response) { // Création du token if (success == true) { socket.emit('subscribe', { token: response.token, idSpectacle: idSpectacle }); // Envoi du token } else { console.log("Erreur generation token."); } }); });
  40. 40. Sur NodeJS socket.on('subscribe', function(showInfos) { // Message envoyé depuis le client JS, contient le token + spectacle id http.get(config.checktoken +'/'+ showInfos.token, function(data){ if(data == 'true') { var myRoom = 'show' + showInfos.idSpectacle; socket.join(myRoom); // Rejoint la room } else { console.info('[' + tsHmsConnex + '] Token inconnu. Connexion refusee, abandon representation ' + showInfos.idSpectacle + ' avec token ' + showInfos.token); } }); });
  41. 41. PERTE DE CONNEXION ?
  42. 42. En cas d’urgence ● Bascule sur des appels Ajax réguliers ● Rebascule automatiquement sur la websocket
  43. 43. DEMO
  44. 44. MERCI ;) QUESTIONS ?
  45. 45. Création de rooms U4 Room idSpectacle1 U1 U2 U3 Room idSpectacle2 Socket Notification Principe d’ un canal IRC

×