SlideShare une entreprise Scribd logo
WebSocket avec Java EE 7
Florian Beaufumé
09/2015
Florian Beaufumé
• Architecte logiciel
• Spécialisé en Java et web
• Freelance
• florian.beaufume@adeliosys.fr
• www.adeliosys.fr
• www.linkedin.com/in/fbeaufume
• Protocole
• Outils
• API JavaScript du W3C
• API Java de Java EE 7
• Retour d'expérience
Sommaire
Protocole
Protocoles web
WebSocket
HTTP
SPDY
AJAX
Comet
HTTP/2
SSE
Full-duplex for the web
• HTTP 1.0 :
• Sur TCP
• Requête-réponse avec fermeture de connexion
• HTTP 1.1 :
• Keep-alive
• AJAX :
• Requêtes asynchrones
• HTML ou data
Historique
• Short polling :
• Requêtes périodiques courtes sur le serveur
• Comet :
• Long polling :
• Requêtes sur le serveur qui bloquent en attente de réponse
• Streaming :
• Requête longue sur le serveur avec plusieurs contenus retournés
• Limitations :
• Temps de requête/connexion
• Overhead HTTP
• Buffering des proxy
Historique
• Server-Sent Event (SSE) :
• Push uniquement, en texte, pas de streaming
• SPDY :
• HTTP amélioré par Google : compression des headers,
multiplexage des requêtes, etc
• Push de ressources (pas d'API JS de callback)
• Upgradable en WebSocket
• HTTP/2 :
• Standard basé sur SPDY : compression, multiplexage,
upgradable en WebSocket, etc
• Push de ressources
Historique
• Protocole de communication full-duplex sur connexion TCP
• RFC 6455
• Texte ou binaire
• Crypté ("wss:") ou pas ("ws:")
• Web friendly :
• Upgrade d'HTTP ou indépendant
• API JavaScript par W3C
• Supporté par les browsers : Ch 16, FF 11, IE 10, Saf 6
• Sous-protocoles, e.g. XMPP, STOMP, SIP
• Cible : applications temps réel, event-driven
• Bénéfices : réduction de bande passante et latence
WebSocket
Exemples de communication
Agar.io
• JavaScript :
• API JavaScript standard du W3C
• SocksJS : émulation WebSocket
• Socket.io : wrapper WebSocket, AJAX long-polling, etc,
utilisable aussi sur Node.js
• Java :
• Les API propriétaires des serveurs d'application
• Java API for WebSocket 1.0 (JSR 356, dans Java EE 7)
• Spring : fallback transparent sur SocksJS
• Atmosphere : framework Java et JS supportant Comet,
SSE, WebSocket, etc.
API
• Chat basique : http://localhost:8080/chat/
Démonstration
• Cryptage via "wss:"
• Authentification :
• Pas de mécanisme spécifique
• Solutions HTTP possibles, par ex cookies
• Ou par message applicatif
• Pas de Same-Origin Policy
• Cross-Site WebSocket Hijacking (CSWSH) :
• Similaire à CSRF
• Vérifier le header "Origin"
• Générer un token aléatoire pour l'upgrade
Sécurité
Outils
Chrome
Dark WebSocket Terminal
JMeter
Wireshark
API JavaScript
• HTML
Code client du chat
• JavaScript
Code client du chat
API JavaScript
API JavaScript
Codes de fermeture
Code Nom Description
0-999 Réservés
1000 CLOSE_NORMAL Fermeture normale
1002 CLOSE_PROTOCOL_ERROR Erreur de protocole
1003 CLOSE_UNSUPPORTED Type de message pas supporté
1009 CLOSE_TOO_LARGE Data frame trop grosse
3000-3999 Pour les librairies et frameworks
4000-4999 Pour les applications
… … …
API Java
• Endpoint WebSocket
Code serveur du chat
• Endpoint WebSocket, avec canaux
Code serveur du chat
• Définition d'un endpoint client ou serveur
Endpoint programmatique
• Utilisations d'un endpoint
• Cycle de vie :
• Différent d'une servlet
• Une instance par peer
• Mono-thread
Endpoint programmatique
• Définition et utilisation
Endpoint serveur par annotation
• Similaire à un endpoint serveur
• @ClientEndpoint plutôt que @ServerEndpoint, donc
sans path
Endpoint client par annotation
Session et RemoteEndpoint
Encoder et decoder
• Rétrocompatible
• Amélioration pour les MessageHandler via lambdas
API WebSocket 1.1
• Cible Java EE 8
• Pas encore final
• Améliorations envisagées :
• Support des scopes CDI
• API bas niveau pour gérer les frames
• Amélioration des extensions
• API de filtrage
• Amélioration sur les sous-protocoles
• API cliente : support de proxy, modes d'AH HTTP, etc.
• Broadcast
• Sécurité, par exemple @RolesAllowed
• Cluster
• Etc.
API WebSocket.NEXT
Retour d'expérience
KeyBout
• http://www-adeliosys.rhcloud.com/keybout/
• 10 pages HTML
Conception
JSP
CDI
WebSocket
JSON-P
HTML
Bootstrap
JavaScript
WebSocket
Browser
Serveur d'application
Java EE 7
• Client vers serveur : actions en texte, exemples :
• create-game Capture English 2 10
• join-game Tom
• claim-word 42 Coalition
• Serveur vers client : notifications en JSON, exemple :
• { "type":"games-list",
"list":[ {
"creator":"Tom",
"type":"Capture",
"language":"English",
"rounds":2,
"words":10,
"guests":[ ] } ] }
Messages
Couches applicatives
Games
Game
Results
Endpoints Contrôleurs
V1
Play PlayV3
Services
Games
Games
Games
Game
Results
Games
Game
Results
V2 Games
Games
Game
Results
Play
Games
Game
Results
Pages
/games
/game/{id}
/results/{id}
/games
/game/{id}
/results/{id}
/play
Métier
Métier
MétierRéceptions
Sécurité
Session WS
Emissions
Session WS
Emissions
Réceptions
Sécurité
Réceptions
Sécurité
Session WS
Emissions
• Pas lié à WebSocket mais au push :
• Besoin d'indentification et catégorisation des clients
• Plusieurs états à coordonner :
• Session HTTP
• Session WebSocket
• Etat applicatif
• Web vs WebSocket : manque de solutions intégrées à ce
jour
Impacts sur la conception
• Un path d'endpoint WebSocket doit commencer par "/",
pas nécessaire pour JAX-RS
• WildFly 8.0.0 : codes d'erreur pas supportés (corrigé en
8.1.0)
• Quelques limitations d'héritage
• Injection de @Singleton ok, mais pas @RequestScoped
• Clustering pas spécifié :
• Load-balancing, réplication de session, fail-over ?
• L'API Spring semble aller plus loin
API Java
florian.beaufume@adeliosys.fr
www.adeliosys.fr
www.linkedin.com/in/fbeaufume
Merci

Contenu connexe

Tendances

Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
Jérémy Lecour
 
Service Workers
Service WorkersService Workers
Service Workers
Mathieu Le Bihan
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
Florian Beaufumé
 
Cours 2/3 - Architecture Web
Cours 2/3 - Architecture WebCours 2/3 - Architecture Web
Cours 2/3 - Architecture Web
Adyax
 
PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005
Eric D.
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs
13p
 
Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"
Adyax
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
Horacio Gonzalez
 
NodeJs, une introduction
NodeJs, une introductionNodeJs, une introduction
NodeJs, une introduction
Toxicode
 
Html5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUGHtml5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUGJUG Toulouse
 
ToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & Agilité
Nicolas Deverge
 
nouveautés du moteur Bonita 7.9
nouveautés du moteur Bonita 7.9nouveautés du moteur Bonita 7.9
nouveautés du moteur Bonita 7.9
Bonitasoft
 
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
Utiliser pleinement le navigateur et les nouveaux clients web  - AFUP 2007Utiliser pleinement le navigateur et les nouveaux clients web  - AFUP 2007
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
Eric D.
 
APACHE TOMCAT
APACHE TOMCATAPACHE TOMCAT
APACHE TOMCAT
Rachid NID SAID
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012
FastConnect
 
Nginx - Serveur HTTP haute performances
Nginx - Serveur HTTP haute performancesNginx - Serveur HTTP haute performances
Nginx - Serveur HTTP haute performancesPascal Armand
 
Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB13p
 
Un environnement de développement solide avec wamp
Un environnement de développement solide avec wampUn environnement de développement solide avec wamp
Un environnement de développement solide avec wamp
Nicolas Beauvais
 
Introduction à Rails - Paris on Rails 2006
Introduction à Rails - Paris on Rails 2006Introduction à Rails - Paris on Rails 2006
Introduction à Rails - Paris on Rails 2006
Eric D.
 

Tendances (20)

Rails 3 au Djangocong
Rails 3 au DjangocongRails 3 au Djangocong
Rails 3 au Djangocong
 
Service Workers
Service WorkersService Workers
Service Workers
 
Nouveautés de java 8
Nouveautés de java 8Nouveautés de java 8
Nouveautés de java 8
 
Upload - Download
Upload - DownloadUpload - Download
Upload - Download
 
Cours 2/3 - Architecture Web
Cours 2/3 - Architecture WebCours 2/3 - Architecture Web
Cours 2/3 - Architecture Web
 
PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005PHP et Performances - AFUP 2005
PHP et Performances - AFUP 2005
 
Présentation de nodejs
Présentation de nodejsPrésentation de nodejs
Présentation de nodejs
 
Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
 
NodeJs, une introduction
NodeJs, une introductionNodeJs, une introduction
NodeJs, une introduction
 
Html5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUGHtml5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUG
 
ToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & Agilité
 
nouveautés du moteur Bonita 7.9
nouveautés du moteur Bonita 7.9nouveautés du moteur Bonita 7.9
nouveautés du moteur Bonita 7.9
 
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
Utiliser pleinement le navigateur et les nouveaux clients web  - AFUP 2007Utiliser pleinement le navigateur et les nouveaux clients web  - AFUP 2007
Utiliser pleinement le navigateur et les nouveaux clients web - AFUP 2007
 
APACHE TOMCAT
APACHE TOMCATAPACHE TOMCAT
APACHE TOMCAT
 
MongoDB day Paris 2012
MongoDB day Paris 2012MongoDB day Paris 2012
MongoDB day Paris 2012
 
Nginx - Serveur HTTP haute performances
Nginx - Serveur HTTP haute performancesNginx - Serveur HTTP haute performances
Nginx - Serveur HTTP haute performances
 
Utilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDBUtilisation de node.js avec mongoDB
Utilisation de node.js avec mongoDB
 
Un environnement de développement solide avec wamp
Un environnement de développement solide avec wampUn environnement de développement solide avec wamp
Un environnement de développement solide avec wamp
 
Introduction à Rails - Paris on Rails 2006
Introduction à Rails - Paris on Rails 2006Introduction à Rails - Paris on Rails 2006
Introduction à Rails - Paris on Rails 2006
 

Similaire à WebSocket avec Java EE 7

technologie web
technologie webtechnologie web
technologie web
Benoît Simard
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
ENSET, Université Hassan II Casablanca
 
Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)
Vincent Biret
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
ENSET, Université Hassan II Casablanca
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
Restlet
 
Advanced html5
Advanced html5Advanced html5
Advanced html5
Arrow Group
 
03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA 03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA
Cellenza
 
LabVIEW™ internet and network applications
LabVIEW™ internet and network applicationsLabVIEW™ internet and network applications
LabVIEW™ internet and network applications
Alexandre STANURSKI
 
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
Microsoft Technet France
 
Introduction à Node.js
Introduction à Node.js Introduction à Node.js
Introduction à Node.js
Sonam TCHEUTSEUN
 
Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent Biret
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secrets
Aymeric Bouillat
 
LemonLDAP::NG et le support SAML2 (RMLL 2010)
LemonLDAP::NG et le support SAML2 (RMLL 2010)LemonLDAP::NG et le support SAML2 (RMLL 2010)
LemonLDAP::NG et le support SAML2 (RMLL 2010)
Clément OUDOT
 
Quoi de neuf dans ASP.NET 4.5
Quoi de neuf dans ASP.NET 4.5Quoi de neuf dans ASP.NET 4.5
Quoi de neuf dans ASP.NET 4.5
Microsoft
 
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
Mohamed Nemili
 
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs WebUne visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Frédéric Harper
 
HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?
Frédéric Harper
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lr
oxmed
 
JEE_chapitre 1.pdf
JEE_chapitre 1.pdfJEE_chapitre 1.pdf
JEE_chapitre 1.pdf
iyadamri
 

Similaire à WebSocket avec Java EE 7 (20)

technologie web
technologie webtechnologie web
technologie web
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)De l'Open Source à l'Open API (in French)
De l'Open Source à l'Open API (in French)
 
Advanced html5
Advanced html5Advanced html5
Advanced html5
 
Soap
SoapSoap
Soap
 
03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA 03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA
 
LabVIEW™ internet and network applications
LabVIEW™ internet and network applicationsLabVIEW™ internet and network applications
LabVIEW™ internet and network applications
 
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
 
Introduction à Node.js
Introduction à Node.js Introduction à Node.js
Introduction à Node.js
 
Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)Vincent biret azure functions et flow #AosCanadianTour (quebec)
Vincent biret azure functions et flow #AosCanadianTour (quebec)
 
La mise en cache et ses secrets
La mise en cache et ses secretsLa mise en cache et ses secrets
La mise en cache et ses secrets
 
LemonLDAP::NG et le support SAML2 (RMLL 2010)
LemonLDAP::NG et le support SAML2 (RMLL 2010)LemonLDAP::NG et le support SAML2 (RMLL 2010)
LemonLDAP::NG et le support SAML2 (RMLL 2010)
 
Quoi de neuf dans ASP.NET 4.5
Quoi de neuf dans ASP.NET 4.5Quoi de neuf dans ASP.NET 4.5
Quoi de neuf dans ASP.NET 4.5
 
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
[TechDays 2012] : Quoi de neuf dans ASP.NET 4.5
 
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs WebUne visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
 
HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?HTML5 et Internet Explorer 9, est-ce réellement compatible?
HTML5 et Internet Explorer 9, est-ce réellement compatible?
 
Gwt oxiane-novae-lr
Gwt oxiane-novae-lrGwt oxiane-novae-lr
Gwt oxiane-novae-lr
 
JEE_chapitre 1.pdf
JEE_chapitre 1.pdfJEE_chapitre 1.pdf
JEE_chapitre 1.pdf
 

Dernier

Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Laurent Speyser
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
OCTO Technology
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
OCTO Technology
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO Technology
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
Université de Franche-Comté
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
UNITECBordeaux
 

Dernier (6)

Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)
 
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
Le Comptoir OCTO - Équipes infra et prod, ne ratez pas l'embarquement pour l'...
 
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
 
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdfOCTO TALKS : 4 Tech Trends du Software Engineering.pdf
OCTO TALKS : 4 Tech Trends du Software Engineering.pdf
 
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'universitéDe l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
De l'IA comme plagiat à la rédaction d'une « charte IA » à l'université
 
Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024Le support de présentation des Signaux 2024
Le support de présentation des Signaux 2024
 

WebSocket avec Java EE 7

  • 1. WebSocket avec Java EE 7 Florian Beaufumé 09/2015
  • 2. Florian Beaufumé • Architecte logiciel • Spécialisé en Java et web • Freelance • florian.beaufume@adeliosys.fr • www.adeliosys.fr • www.linkedin.com/in/fbeaufume
  • 3. • Protocole • Outils • API JavaScript du W3C • API Java de Java EE 7 • Retour d'expérience Sommaire
  • 6. • HTTP 1.0 : • Sur TCP • Requête-réponse avec fermeture de connexion • HTTP 1.1 : • Keep-alive • AJAX : • Requêtes asynchrones • HTML ou data Historique
  • 7. • Short polling : • Requêtes périodiques courtes sur le serveur • Comet : • Long polling : • Requêtes sur le serveur qui bloquent en attente de réponse • Streaming : • Requête longue sur le serveur avec plusieurs contenus retournés • Limitations : • Temps de requête/connexion • Overhead HTTP • Buffering des proxy Historique
  • 8. • Server-Sent Event (SSE) : • Push uniquement, en texte, pas de streaming • SPDY : • HTTP amélioré par Google : compression des headers, multiplexage des requêtes, etc • Push de ressources (pas d'API JS de callback) • Upgradable en WebSocket • HTTP/2 : • Standard basé sur SPDY : compression, multiplexage, upgradable en WebSocket, etc • Push de ressources Historique
  • 9. • Protocole de communication full-duplex sur connexion TCP • RFC 6455 • Texte ou binaire • Crypté ("wss:") ou pas ("ws:") • Web friendly : • Upgrade d'HTTP ou indépendant • API JavaScript par W3C • Supporté par les browsers : Ch 16, FF 11, IE 10, Saf 6 • Sous-protocoles, e.g. XMPP, STOMP, SIP • Cible : applications temps réel, event-driven • Bénéfices : réduction de bande passante et latence WebSocket
  • 12. • JavaScript : • API JavaScript standard du W3C • SocksJS : émulation WebSocket • Socket.io : wrapper WebSocket, AJAX long-polling, etc, utilisable aussi sur Node.js • Java : • Les API propriétaires des serveurs d'application • Java API for WebSocket 1.0 (JSR 356, dans Java EE 7) • Spring : fallback transparent sur SocksJS • Atmosphere : framework Java et JS supportant Comet, SSE, WebSocket, etc. API
  • 13. • Chat basique : http://localhost:8080/chat/ Démonstration
  • 14. • Cryptage via "wss:" • Authentification : • Pas de mécanisme spécifique • Solutions HTTP possibles, par ex cookies • Ou par message applicatif • Pas de Same-Origin Policy • Cross-Site WebSocket Hijacking (CSWSH) : • Similaire à CSRF • Vérifier le header "Origin" • Générer un token aléatoire pour l'upgrade Sécurité
  • 25. Codes de fermeture Code Nom Description 0-999 Réservés 1000 CLOSE_NORMAL Fermeture normale 1002 CLOSE_PROTOCOL_ERROR Erreur de protocole 1003 CLOSE_UNSUPPORTED Type de message pas supporté 1009 CLOSE_TOO_LARGE Data frame trop grosse 3000-3999 Pour les librairies et frameworks 4000-4999 Pour les applications … … …
  • 27. • Endpoint WebSocket Code serveur du chat
  • 28. • Endpoint WebSocket, avec canaux Code serveur du chat
  • 29. • Définition d'un endpoint client ou serveur Endpoint programmatique
  • 30. • Utilisations d'un endpoint • Cycle de vie : • Différent d'une servlet • Une instance par peer • Mono-thread Endpoint programmatique
  • 31. • Définition et utilisation Endpoint serveur par annotation
  • 32. • Similaire à un endpoint serveur • @ClientEndpoint plutôt que @ServerEndpoint, donc sans path Endpoint client par annotation
  • 35. • Rétrocompatible • Amélioration pour les MessageHandler via lambdas API WebSocket 1.1
  • 36. • Cible Java EE 8 • Pas encore final • Améliorations envisagées : • Support des scopes CDI • API bas niveau pour gérer les frames • Amélioration des extensions • API de filtrage • Amélioration sur les sous-protocoles • API cliente : support de proxy, modes d'AH HTTP, etc. • Broadcast • Sécurité, par exemple @RolesAllowed • Cluster • Etc. API WebSocket.NEXT
  • 39. • http://www-adeliosys.rhcloud.com/keybout/ • 10 pages HTML Conception JSP CDI WebSocket JSON-P HTML Bootstrap JavaScript WebSocket Browser Serveur d'application Java EE 7
  • 40. • Client vers serveur : actions en texte, exemples : • create-game Capture English 2 10 • join-game Tom • claim-word 42 Coalition • Serveur vers client : notifications en JSON, exemple : • { "type":"games-list", "list":[ { "creator":"Tom", "type":"Capture", "language":"English", "rounds":2, "words":10, "guests":[ ] } ] } Messages
  • 41. Couches applicatives Games Game Results Endpoints Contrôleurs V1 Play PlayV3 Services Games Games Games Game Results Games Game Results V2 Games Games Game Results Play Games Game Results Pages /games /game/{id} /results/{id} /games /game/{id} /results/{id} /play Métier Métier MétierRéceptions Sécurité Session WS Emissions Session WS Emissions Réceptions Sécurité Réceptions Sécurité Session WS Emissions
  • 42. • Pas lié à WebSocket mais au push : • Besoin d'indentification et catégorisation des clients • Plusieurs états à coordonner : • Session HTTP • Session WebSocket • Etat applicatif • Web vs WebSocket : manque de solutions intégrées à ce jour Impacts sur la conception
  • 43. • Un path d'endpoint WebSocket doit commencer par "/", pas nécessaire pour JAX-RS • WildFly 8.0.0 : codes d'erreur pas supportés (corrigé en 8.1.0) • Quelques limitations d'héritage • Injection de @Singleton ok, mais pas @RequestScoped • Clustering pas spécifié : • Load-balancing, réplication de session, fail-over ? • L'API Spring semble aller plus loin API Java