SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
Temps réel
&
WebSockets
Martin Moizard

vendredi 14 février 14
Pourquoi du temps réel ?
• Avoir des données à jour
• Minimiser les actions utilisateurs

Pourquoi des WebSockets ?
• Performances
• Facilité et simplicité
vendredi 14 février 14
Dans la vie...
polling vs webSockets

vendredi 14 février 14
Dans la vie...
polling vs webSockets

vendredi 14 février 14
Boostrap serveur (1/2)
Node.js & SockJS

var connectedDevices = [];
var echo = sockjs.createServer(options);
echo.on('connection', function(conn) {
connectedDevices.push(conn);
conn.on('data', function(message) {
});
conn.on('close', function() {
connectedDevices.splice(connectedDevices.indexOf(conn), 1);
});
});

vendredi 14 février 14
Boostrap serveur (2/2)
Envoi de message

app.post('/dispatchMessage', function(req, res) {
var messageToDispatch = req.body["message"];
var i = 0;
if (messageToDispatch && messageToDispatch.length) {
for (; i < connectedDevices.length; i++) {
connectedDevices[i].write(messageToDispatch);
}
}
res.type('application/json; charset=utf-8');
res.send('{ "result" : "message dispatched to ' + i + ' devices" }');
});

vendredi 14 février 14
WebSocket & iOS
SocketRocket

• Conforme au protocole
• Développé et maintenu par Square
• Utilisé en prod

vendredi 14 février 14
WebSocket & iOS
Les règles à respecter

• Ouvrir la socket tôt et à tout moment :
•
•
•

Tentative d’ouverture de la socket dans l’AppDelegate
Reachability
Dès que la socket fail ou se ferme pour une raison iconnue (delegates)

• Eviter les reconnexions dans un intervalle de
temps réduit
• Mettre en place un retry automatique incrémental borné (à 30s par ex.)

vendredi 14 février 14
WebSocket & iOS
A la reception du message

• Pattern possible : les notifications
•
•

vendredi 14 février 14

L’objet qui gère la WebSocket reçoit le message et
envoie une notification avec le message attaché
Les controlleurs/vues intéressés s’abonnent à la
notification et gèrent la réception de la notification
et le traitement du message.
WebSocket & iOS

•

vendredi 14 février 14

Code & démo
WebSocket & iOS
Les limites

• Attention à la configuration de certains
opérateurs téléphoniques

• Protocole bloqué (cas de SFR)
• Workaround : SSL

vendredi 14 février 14
MERCI !

@MartinMoizard
https://github.com/MartinMoizard/Realtime-samples

vendredi 14 février 14

Contenu connexe

En vedette

08 la-vie-tendre-et-insolites
08 la-vie-tendre-et-insolites08 la-vie-tendre-et-insolites
08 la-vie-tendre-et-insolitesGerard Houdinet
 
Libro trailer 1º eso
Libro trailer 1º esoLibro trailer 1º eso
Libro trailer 1º esoJOSÉ TOMÁS
 
Conférence 11 octobre 2014 Balghouthi_Ayadi_Belhaj_Paris
Conférence 11 octobre 2014  Balghouthi_Ayadi_Belhaj_ParisConférence 11 octobre 2014  Balghouthi_Ayadi_Belhaj_Paris
Conférence 11 octobre 2014 Balghouthi_Ayadi_Belhaj_ParisMohamed BALGHOUTHI
 
Conflictos sociambientales en Bolivia
Conflictos sociambientales en BoliviaConflictos sociambientales en Bolivia
Conflictos sociambientales en BoliviaGobernabilidad
 
Aula convivencia averroes 2006
Aula convivencia averroes 2006Aula convivencia averroes 2006
Aula convivencia averroes 2006nlopezrey
 
Etat de l'agriculture urbaine à montréal arrondissement st laurent
Etat de l'agriculture urbaine à montréal arrondissement st laurentEtat de l'agriculture urbaine à montréal arrondissement st laurent
Etat de l'agriculture urbaine à montréal arrondissement st laurentLouis-Alexandre Cazal
 
Etat de l'agriculture urbaine à Montréal - Présentation arrondissement pierre...
Etat de l'agriculture urbaine à Montréal - Présentation arrondissement pierre...Etat de l'agriculture urbaine à Montréal - Présentation arrondissement pierre...
Etat de l'agriculture urbaine à Montréal - Présentation arrondissement pierre...Louis-Alexandre Cazal
 
Análisis del Informe de la Ponencia del Proyecto de Ley de medidas urgentes p...
Análisis del Informe de la Ponencia del Proyecto de Ley de medidas urgentes p...Análisis del Informe de la Ponencia del Proyecto de Ley de medidas urgentes p...
Análisis del Informe de la Ponencia del Proyecto de Ley de medidas urgentes p...Universidad Autónoma de Barcelona
 
Presentacion del parcial
Presentacion del parcialPresentacion del parcial
Presentacion del parcialDiego
 
Présentation Icybee
Présentation IcybeePrésentation Icybee
Présentation Icybeeolvlvl
 
La relación laboral especial del personal al servicio del hogar familiar. Com...
La relación laboral especial del personal al servicio del hogar familiar. Com...La relación laboral especial del personal al servicio del hogar familiar. Com...
La relación laboral especial del personal al servicio del hogar familiar. Com...Universidad Autónoma de Barcelona
 

En vedette (20)

Séminaire International du medef | 13 octobre 2014
Séminaire International du medef | 13 octobre 2014   Séminaire International du medef | 13 octobre 2014
Séminaire International du medef | 13 octobre 2014
 
08 la-vie-tendre-et-insolites
08 la-vie-tendre-et-insolites08 la-vie-tendre-et-insolites
08 la-vie-tendre-et-insolites
 
Libro trailer 1º eso
Libro trailer 1º esoLibro trailer 1º eso
Libro trailer 1º eso
 
Conférence 11 octobre 2014 Balghouthi_Ayadi_Belhaj_Paris
Conférence 11 octobre 2014  Balghouthi_Ayadi_Belhaj_ParisConférence 11 octobre 2014  Balghouthi_Ayadi_Belhaj_Paris
Conférence 11 octobre 2014 Balghouthi_Ayadi_Belhaj_Paris
 
Propositions pour une réforme structurelle de l'apprentissage
Propositions pour une réforme structurelle de l'apprentissagePropositions pour une réforme structurelle de l'apprentissage
Propositions pour une réforme structurelle de l'apprentissage
 
Conflictos sociambientales en Bolivia
Conflictos sociambientales en BoliviaConflictos sociambientales en Bolivia
Conflictos sociambientales en Bolivia
 
D n°1 présentation agen asso 47
D n°1 présentation agen asso 47D n°1 présentation agen asso 47
D n°1 présentation agen asso 47
 
Aula convivencia averroes 2006
Aula convivencia averroes 2006Aula convivencia averroes 2006
Aula convivencia averroes 2006
 
Alba
AlbaAlba
Alba
 
Etat de l'agriculture urbaine à montréal arrondissement st laurent
Etat de l'agriculture urbaine à montréal arrondissement st laurentEtat de l'agriculture urbaine à montréal arrondissement st laurent
Etat de l'agriculture urbaine à montréal arrondissement st laurent
 
Etat de l'agriculture urbaine à Montréal - Présentation arrondissement pierre...
Etat de l'agriculture urbaine à Montréal - Présentation arrondissement pierre...Etat de l'agriculture urbaine à Montréal - Présentation arrondissement pierre...
Etat de l'agriculture urbaine à Montréal - Présentation arrondissement pierre...
 
Tennis - présentation ville
Tennis - présentation villeTennis - présentation ville
Tennis - présentation ville
 
Psix1
Psix1Psix1
Psix1
 
Análisis del Informe de la Ponencia del Proyecto de Ley de medidas urgentes p...
Análisis del Informe de la Ponencia del Proyecto de Ley de medidas urgentes p...Análisis del Informe de la Ponencia del Proyecto de Ley de medidas urgentes p...
Análisis del Informe de la Ponencia del Proyecto de Ley de medidas urgentes p...
 
Interaction webinair google_panda
Interaction webinair google_pandaInteraction webinair google_panda
Interaction webinair google_panda
 
Presentacion del parcial
Presentacion del parcialPresentacion del parcial
Presentacion del parcial
 
Questionnaire
QuestionnaireQuestionnaire
Questionnaire
 
Jugando con la luna
Jugando con la lunaJugando con la luna
Jugando con la luna
 
Présentation Icybee
Présentation IcybeePrésentation Icybee
Présentation Icybee
 
La relación laboral especial del personal al servicio del hogar familiar. Com...
La relación laboral especial del personal al servicio del hogar familiar. Com...La relación laboral especial del personal al servicio del hogar familiar. Com...
La relación laboral especial del personal al servicio del hogar familiar. Com...
 

Similaire à Websockets par Martin Moizard

2013 02-27-owasp top10 javascript
 2013 02-27-owasp top10 javascript 2013 02-27-owasp top10 javascript
2013 02-27-owasp top10 javascriptSébastien GIORIA
 
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)Bruno Bonnin
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoftdavrous
 
Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Philippe Sfeir
 
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...Normandie Web Xperts
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanMicrosoft
 
Grunt / Bower / Yeoman ou comment automatiser le développement d’un projet we...
Grunt / Bower / Yeoman ou comment automatiser le développement d’un projet we...Grunt / Bower / Yeoman ou comment automatiser le développement d’un projet we...
Grunt / Bower / Yeoman ou comment automatiser le développement d’un projet we...Microsoft
 
Grunt, Bower, Yeoman ou comment automatiser un projet web SPA
Grunt, Bower, Yeoman ou comment automatiser un projet web SPAGrunt, Bower, Yeoman ou comment automatiser un projet web SPA
Grunt, Bower, Yeoman ou comment automatiser un projet web SPATouchify
 
Spécifications de webservices avec un seul outil
Spécifications de webservices avec un seul outilSpécifications de webservices avec un seul outil
Spécifications de webservices avec un seul outilFabernovel
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Xavier NOPRE
 
Javascript in a continuous integration environment
Javascript in a continuous integration environmentJavascript in a continuous integration environment
Javascript in a continuous integration environmentFrederic Dewinne
 
REST JUG Toulouse 20100615
REST JUG Toulouse 20100615REST JUG Toulouse 20100615
REST JUG Toulouse 20100615JUG Toulouse
 
Présentation de Tsung chez Leboncoin
Présentation de Tsung chez LeboncoinPrésentation de Tsung chez Leboncoin
Présentation de Tsung chez LeboncoinRodolphe Quiédeville
 

Similaire à Websockets par Martin Moizard (14)

HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
 
2013 02-27-owasp top10 javascript
 2013 02-27-owasp top10 javascript 2013 02-27-owasp top10 javascript
2013 02-27-owasp top10 javascript
 
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
[Devoxx MA 2023] R2DBC = R2D2 + JDBC (enfin presque...)
 
Nouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde MicrosoftNouveautés JavaScript dans le monde Microsoft
Nouveautés JavaScript dans le monde Microsoft
 
Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013
 
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
 
Découverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet SpartanDécouverte du moteur de rendu du projet Spartan
Découverte du moteur de rendu du projet Spartan
 
Grunt / Bower / Yeoman ou comment automatiser le développement d’un projet we...
Grunt / Bower / Yeoman ou comment automatiser le développement d’un projet we...Grunt / Bower / Yeoman ou comment automatiser le développement d’un projet we...
Grunt / Bower / Yeoman ou comment automatiser le développement d’un projet we...
 
Grunt, Bower, Yeoman ou comment automatiser un projet web SPA
Grunt, Bower, Yeoman ou comment automatiser un projet web SPAGrunt, Bower, Yeoman ou comment automatiser un projet web SPA
Grunt, Bower, Yeoman ou comment automatiser un projet web SPA
 
Spécifications de webservices avec un seul outil
Spécifications de webservices avec un seul outilSpécifications de webservices avec un seul outil
Spécifications de webservices avec un seul outil
 
Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013Play framework - Human Talks Grenoble - 12.02.2013
Play framework - Human Talks Grenoble - 12.02.2013
 
Javascript in a continuous integration environment
Javascript in a continuous integration environmentJavascript in a continuous integration environment
Javascript in a continuous integration environment
 
REST JUG Toulouse 20100615
REST JUG Toulouse 20100615REST JUG Toulouse 20100615
REST JUG Toulouse 20100615
 
Présentation de Tsung chez Leboncoin
Présentation de Tsung chez LeboncoinPrésentation de Tsung chez Leboncoin
Présentation de Tsung chez Leboncoin
 

Plus de CocoaHeads France

Plus de CocoaHeads France (20)

Mutation testing for a safer Future
Mutation testing for a safer FutureMutation testing for a safer Future
Mutation testing for a safer Future
 
iOS App Group for Debugging
iOS App Group for DebuggingiOS App Group for Debugging
iOS App Group for Debugging
 
Asynchronous swift
Asynchronous swiftAsynchronous swift
Asynchronous swift
 
Visual accessibility in iOS11
Visual accessibility in iOS11Visual accessibility in iOS11
Visual accessibility in iOS11
 
My script - One year of CocoaHeads
My script - One year of CocoaHeadsMy script - One year of CocoaHeads
My script - One year of CocoaHeads
 
Ui testing dealing with push notifications
Ui testing dealing with push notificationsUi testing dealing with push notifications
Ui testing dealing with push notifications
 
CONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANE
 
L'intégration continue avec Bitrise
L'intégration continue avec BitriseL'intégration continue avec Bitrise
L'intégration continue avec Bitrise
 
Super combinators
Super combinatorsSuper combinators
Super combinators
 
Design like a developer
Design like a developerDesign like a developer
Design like a developer
 
Handle the error
Handle the errorHandle the error
Handle the error
 
Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3
 
Programme MFI retour d'expérience
Programme MFI retour d'expérienceProgramme MFI retour d'expérience
Programme MFI retour d'expérience
 
How to communicate with Smart things?
How to communicate with Smart things?How to communicate with Smart things?
How to communicate with Smart things?
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPods
 
Let's migrate to Swift 3.0
Let's migrate to Swift 3.0Let's migrate to Swift 3.0
Let's migrate to Swift 3.0
 
Project Entourage
Project EntourageProject Entourage
Project Entourage
 
What's new in iOS9
What's new in iOS9What's new in iOS9
What's new in iOS9
 
BitTorrent on iOS
BitTorrent on iOSBitTorrent on iOS
BitTorrent on iOS
 
CloudKit as a backend
CloudKit as a backendCloudKit as a backend
CloudKit as a backend
 

Websockets par Martin Moizard

  • 2. Pourquoi du temps réel ? • Avoir des données à jour • Minimiser les actions utilisateurs Pourquoi des WebSockets ? • Performances • Facilité et simplicité vendredi 14 février 14
  • 3. Dans la vie... polling vs webSockets vendredi 14 février 14
  • 4. Dans la vie... polling vs webSockets vendredi 14 février 14
  • 5. Boostrap serveur (1/2) Node.js & SockJS var connectedDevices = []; var echo = sockjs.createServer(options); echo.on('connection', function(conn) { connectedDevices.push(conn); conn.on('data', function(message) { }); conn.on('close', function() { connectedDevices.splice(connectedDevices.indexOf(conn), 1); }); }); vendredi 14 février 14
  • 6. Boostrap serveur (2/2) Envoi de message app.post('/dispatchMessage', function(req, res) { var messageToDispatch = req.body["message"]; var i = 0; if (messageToDispatch && messageToDispatch.length) { for (; i < connectedDevices.length; i++) { connectedDevices[i].write(messageToDispatch); } } res.type('application/json; charset=utf-8'); res.send('{ "result" : "message dispatched to ' + i + ' devices" }'); }); vendredi 14 février 14
  • 7. WebSocket & iOS SocketRocket • Conforme au protocole • Développé et maintenu par Square • Utilisé en prod vendredi 14 février 14
  • 8. WebSocket & iOS Les règles à respecter • Ouvrir la socket tôt et à tout moment : • • • Tentative d’ouverture de la socket dans l’AppDelegate Reachability Dès que la socket fail ou se ferme pour une raison iconnue (delegates) • Eviter les reconnexions dans un intervalle de temps réduit • Mettre en place un retry automatique incrémental borné (à 30s par ex.) vendredi 14 février 14
  • 9. WebSocket & iOS A la reception du message • Pattern possible : les notifications • • vendredi 14 février 14 L’objet qui gère la WebSocket reçoit le message et envoie une notification avec le message attaché Les controlleurs/vues intéressés s’abonnent à la notification et gèrent la réception de la notification et le traitement du message.
  • 10. WebSocket & iOS • vendredi 14 février 14 Code & démo
  • 11. WebSocket & iOS Les limites • Attention à la configuration de certains opérateurs téléphoniques • Protocole bloqué (cas de SFR) • Workaround : SSL vendredi 14 février 14