Slide 1

Slide 1 text

U W S L . AFUP Lyon / 19 décembre 2016

Slide 2

Slide 2 text

Q ? C Développements d'applications, de sites, constitution d'équipes, accompagnement, méthodes agiles...     https://chstudio.fr [email protected] @s_hulard http://github.com/shulard

Slide 3

Slide 3 text

L ... 1. WebSockets ? 2. Laravel ? 3. Et concrètement ?

Slide 4

Slide 4 text

W S ?

Slide 5

Slide 5 text

P Standardisé en 2011 par l' dans la Communication bidirectionnelle Client ↔ Serveur Communication temps réel, la connection reste ouverte Utilise une requête HTTP pour réaliser le handshake : Upgrade de HTTP à WS Autorisation de la connection IETF RFC6455

Slide 6

Slide 6 text

I Côté client (navigateur) : pour envoyer recevoir des messages Bien supporté aujourd'hui : IE10+, Edge, Firefox, Chrome, Safari, Opera... Et sur mobile aussi, seul mauvais élève : Opera Mini Côté serveur : Programme d'écoute pour le handshake Programme d'écoute / réponse de messages API JavaScript http://caniuse.com/#feat=websockets

Slide 7

Slide 7 text

P Côté client : Vanilla JS Côté serveur : PHP Node.JS SAAS socket.io Pusher Hoa\Websocket Ratchet socket.io Pusher

Slide 8

Slide 8 text

Z : S . Solution Open Source Propose une implémentation client et serveur Gère un fallback en long polling Ajax Outil solide et maintenu par une grande communauté Développé en JavaScript

Slide 9

Slide 9 text

L ?

Slide 10

Slide 10 text

“T PHP F F W A ” Framework PHP créé par Taylor Otwell en 2011 Développement d'applications web en utilisant Basé sur le module de Symfony 2 Eloquent ORM : ActiveRecord pour la base de données MVC HTTPKernel

Slide 11

Slide 11 text

V . ? Sortie en août 2016 Trois nouveaux modules : : Recherche Full Text intégrée : OAuth 2 server : Event broadcasting → Scout Passport Echo

Slide 12

Slide 12 text

L L E Apporter la puissance des WebSockets dans votre application sans la complexité !

Slide 13

Slide 13 text

E ?

Slide 14

Slide 14 text

D PHP Création d'un objet Event Implémentation de l'interface : ShouldBroadcast Envoi des évenements vers le client avec la fonction broadcast Super facile https://laravel.com/docs/5.3/broadcasting

Slide 15

Slide 15 text

E all()); $message->save(); broadcast(new UserMessageCreated($request->user(), $message)); } }

Slide 16

Slide 16 text

user = $user; $this->message = $message; } public function broadcastOn() { return new PrivateChannel('user.'.$this->user->id); } }

Slide 17

Slide 17 text

Q Les évenements émis sont placés dans une file d'attente (queue) Il faut choisir son driver: BDD, Redis, SQS, Beanstalk... Par défaut c'est “sync” mais attention à l'impact sur les temps de réponse de l'application

Slide 18

Slide 18 text

Q Il faut aussi un driver de broadcast : Pusher, Redis, Log, Null Pusher ? C'est le seul driver de WebSocket !! Et c'est un service SAAS payant... Redis sert de passerelle vers d'autres solutions...

Slide 19

Slide 19 text

P Pas de solution en PHP pour l'instant... Obligé de passer par un serveur de WebSocket en JavaScript : Lit les informations passées dans Redis pour les envoyer au client ⚠ Pas de communication Client → Serveur possible tlaverdure/laravel-echo-server

Slide 20

Slide 20 text

S ' ⚠ Le socle technique devient complexe.

Slide 21

Slide 21 text

E ? Taylor Otwell a publié un client JavaScript spécifique : Code simple et accessible pour écouter et réagir aux évènements Approche similaire à l'API native WebSocket ⚠ Packagé par défaut avec le client Pusher... En n'utilisant pas Pusher, la stabilité est relative : Par exemple obligation de forcer une version spécifique pour que ça fonctionne. laravel/echo

Slide 22

Slide 22 text

B L'application développée fonctionne aujourd'hui correctement L'utilisation d'AJAX pour les messages Client → Serveur n'est pas idéal L'implémentation manque de maturité L'installation et la maintenance sont beaucoup plus complexes que prévu

Slide 23

Slide 23 text

Q ? http://shulard.github.io/talks/afup-lyon-lighting-décembre-2016