SlideShare une entreprise Scribd logo
1  sur  28
Push to the Web - Le protocole WebSocket
et la librairie SignalR
Dominic Marchand
9 février 2015
À propos de moi
• Développeur web depuis 1996
• Réseautique / DevOps
• Agences et médias
• Stack Microsoft
• Aujourd’hui : backend électoral
pour Radio-Canada
@domimarch
Aujourd’hui – Push to the web
• Scénarios typiques
• D’où on part
• WebSocket
• SignalR
• Les bases
• Connexions
• Groupes
• Sécurité
• Performance / Scaling
• Conclusion
Scénarios typiques
• HTTP = OK pour énormément de cas d’utilisation, mais pas toujours…
• Discussions et messagerie en ligne (webchat)
• Informations financières et boursières (stock tickers)
• Enchères
• Jeux
• Résultats sportifs et électoraux
• Consoles de monitoring et autres dashboards dynamiques
• Capteurs (sensors)
D’où on part
• HTTP = stateless
• Serveur ne peut pas « initier » un échange
• Solutions inélégantes, workarounds
Comet | HTTP server push | Pushlet | Long polling | Flash XMLSocket relays
• Autres protocoles
IRC | BitTorrent | Push Access Protocol
WebSocket
• Protocole/API issu du standard HTML5 offrant un canal de communication
full-duplex sur une connexion TCP
• Seul lien avec HTTP : le handshake se fait au moyen d'une requête HTTP/S
de type UPGRADE
• Communication se fait en TCP sur le port 80/443, donc firewall-friendly
WebSocket – Support
CLIENT
• Firefox 6
• Safari 6
• Chrome 14
• Opera 12.10
• IE 10
• Inclut les versions
mobiles de ces
navigateurs
SERVEUR
• IIS 8
donc Windows 8 ou
Windows Server 2012
WebSocket
DEMO : JabbR
SignalR
• Librairie ASP.NET pour applications real-
time, 2-way
• Développement et support par Microsoft
• .NET Framework 4
• Open Source
• Event-driven
• Asynchronous
• Scalable
• Multiple transports
• Librairies client pour javascript (browser) et
.NET (server as client, WPF, WinForms,
WinRT, WinPhone, Console, etc.) via Nuget
SignalR
DEMO : Setup + Hubs
SignalR – Transports
• Support pour 4 différents types de transport;
tout est géré de façon transparente par
SignalR (aucune configuration)
• Niveaux disponibles (dans cet ordre)
• WebSocket
[ requiert IIS 8 sur le serveur et .NET 4.5 pour le runtime ]
• Server Sent Events / EventSource
[ sans cross domain; IE ne supporte pas ]
• Forever Frame
[ utilisation d’un <iframe />, IE seulement ]
• Ajax Long Polling
SignalR
DEMO : Transports
SignalR – Cycle de vie d’une connexion
• 3 niveaux d’abstraction de connexions
• SignalR (lien logique entre un client et un URL, y’a un ConnectionId unique
pour chaque connexion client/serveur)
• Transport (lien logique qui est lié au type de transport utilisé)
• Physique (câble réseau, lien wifi, routeurs, etc.)
• Une perte de connexion du réseau PHYSIQUE n’implique PAS
NÉCESSAIREMENT une perte de la connexion TRANSPORT
SignalR – Cycle de vie d’une connexion
• Start – déclenche le processus de handshake entre le client et le serveur,
c’est là que la sélection du type de transport optimal s’effectue
• ConnectionSlow – mécanisme de keepalive et disconnectTimeout – 10
secondes par défaut
• Reconnecting – handshake est essayé à nouveau – la connexion
logique n’est pas encore « perdue »
• OnReconnected – indique à la connexion logique (sur le serveur) que le
client a réussi à se rebrancher
• OnDisconnected (serveur) / Closed (client) – la connexion physique a
été perdue et le transport est fermé
• Stop – la connexion logique SignalR est complètement terminée
(volontaire ou non)
SignalR – Cycle de vie d’une connexion
SignalR – Cycle de vie d’une connexion
SignalR – Cycle de vie d’une connexion
SignalR – Cycle de vie d’une connexion
SignalR – Cycle de vie d’une connexion
• Les valeurs par défaut de KeepAlive (10 sec.), DisconnectTimeout
(30 sec.) et ConnectionTimeout (110 sec., utilisé pour le long polling)
peuvent être modifiées
• Les événements ConnectionSlow, Reconnecting et
Disconnected peuvent être utilisés pour informer le client de ce qui se
passe
• On peut automatiquement ré-appeler Start() dans le handler
Disconnected pour continuellement reconnecter un client
• Depuis SignalR 2.1, on peut aussi savoir si la fin d’une connexion était
voulue ou pas (stopCalled sur serveur, lastError sur client)
• Une option de debugging avancé est disponible pour voir plus de détails
SignalR
DEMO : Cycle de vie d’une connexion
SignalR - Groupes
• Un groupe représente un sous-ensemble d’utilisateurs à qui envoyer
certains messages, donc qu’on ne veut pas broadcaster à tous (une
chat room, un item spécifique dans une plate-forme d’enchères, une
circonscription dans le cadre d’une élection, une partie spécifique
pour un service de résultats sportifs, etc.)
• Les groupes sont créés et supprimés automatiquement par SignalR et
il n’y a pas d’API de gestion des groupes
• Aucune persistence d’un « abonnement » à un groupe au-delà de la
connexion logique SignalR, mais supporté lors d’un
OnReconnected
• Ce n’est PAS un mécanisme de sécurité
SignalR
DEMO : Groupes
SignalR - Sécurité
• Y’a aucune mécanique d’authentification des utilisateurs dans SignalR; tout doit
se faire en amont, dans l’application web qui « host » la couche SignalR
• On peut cependant appliquer l’attribut Authorize sur un Hub ou sur une
méthode spécifique d’un Hub
• Si de l’information sensible est échangée par SignalR, il est fortement
recommandé d’utiliser le protocole HTTPS/SSL/TLS qui fera aussi en sorte que les
échanges WebSocket seront sécurisés (wss:// au lieu de ws://)
• Les requêtes cross domain sont refusées par défaut; dans la mesure du possible,
laisser tel quel mais c’est possible de les autoriser
• Si on ne veut pas exposer tous les noms de méthodes disponibles sur un Hub, on
peut désactiver la génération dynamique de proxy pour javascript
• Ne pas retourner les exceptions aux clients; utilisez plutôt la méthode
DisplayError dans vos catch()
SignalR
DEMO : Sécurité
SignalR - Performance
• Fréquence élevée (plusieurs messages par seconde) ? Batch
• Réduire la taille des messages
• Paramètres de performance sur le serveur
• SignalR : DefaultMessageBufferSize
• IIS : appConcurrentRequestLimit
• ApplicationPool : queueLength et maxConcurrentRequestsPerCPU
• Utiliser WebSocket (IIS 8 + .NET 4.5) si possibleCompteurs de
performance disponibles (Microsoft.AspNet.SignalR.Utils)
• Outils de load testing : Crank
SignalR - Scaling
• Si un serveur ne suffit plus, Scaleout !
• Trois backplanes disponibles (via Nuget) :
• Azure Service Bus
• Redis
• SQL Server
• Une seule ligne de configuration !
GlobalHost.DependencyResolver.UseServiceBus(connString, "MyApp");
• Attention : backplane peut devenir un
bottleneck
SignalR - Conclusion
• Idéal pour les scénarios évoqués au début de la session
• Même si WebSocket n’est pas disponible (IIS < 8 et .NET < 4.5), allez-y
quand même
• Facile à implémenter, autant du côté serveur que client
• Pour des scénarios à petit ou moyen volume, c’est plug-and-play
• Pour des scénarios à grand volume, il faudra assurément fine tuner les
serveurs
• Pour des scénarios à grande fréquence, il faudra probablement
ajuster le code
• Bien documenté et communauté active d’utilisateurs
Merci :-)
http://asp.net/signalr

Contenu connexe

Tendances

Exemple de configuration de serveur VPN distant avec NAT entrant pour le traf...
Exemple de configuration de serveur VPN distant avec NAT entrant pour le traf...Exemple de configuration de serveur VPN distant avec NAT entrant pour le traf...
Exemple de configuration de serveur VPN distant avec NAT entrant pour le traf...Regis VPN
 
Les Firewalls / Sécurité informatique
Les Firewalls / Sécurité informatiqueLes Firewalls / Sécurité informatique
Les Firewalls / Sécurité informatiqueSylvain Maret
 
3 switchport securité
3 switchport securité3 switchport securité
3 switchport securitémedalaa
 
Mise en place d'un vpn site à site avec pfsense
Mise en place d'un vpn site à site avec pfsenseMise en place d'un vpn site à site avec pfsense
Mise en place d'un vpn site à site avec pfsensePape Moussa SONKO
 
Les commandes CISCO (routeur)
Les commandes CISCO (routeur)Les commandes CISCO (routeur)
Les commandes CISCO (routeur)EL AMRI El Hassan
 
Weos tunnel ssl hôte à site
Weos   tunnel ssl hôte à siteWeos   tunnel ssl hôte à site
Weos tunnel ssl hôte à siteFabian Vandendyck
 
VTP(Virtual Trunking Protocol)
VTP(Virtual Trunking Protocol)VTP(Virtual Trunking Protocol)
VTP(Virtual Trunking Protocol)Sirine Ibrahim
 
Présentation sécurité open_ssl
Présentation sécurité open_sslPrésentation sécurité open_ssl
Présentation sécurité open_ssldihiaselma
 
Présentation du portail captif Alcasar PPT avec tutoriel pratique illustré
Présentation du portail captif Alcasar PPT avec tutoriel pratique illustréPrésentation du portail captif Alcasar PPT avec tutoriel pratique illustré
Présentation du portail captif Alcasar PPT avec tutoriel pratique illustréyassine87
 

Tendances (20)

Exemple de configuration de serveur VPN distant avec NAT entrant pour le traf...
Exemple de configuration de serveur VPN distant avec NAT entrant pour le traf...Exemple de configuration de serveur VPN distant avec NAT entrant pour le traf...
Exemple de configuration de serveur VPN distant avec NAT entrant pour le traf...
 
Les Firewalls / Sécurité informatique
Les Firewalls / Sécurité informatiqueLes Firewalls / Sécurité informatique
Les Firewalls / Sécurité informatique
 
Spanning-Tree
Spanning-TreeSpanning-Tree
Spanning-Tree
 
Pre sou-edit1
Pre sou-edit1Pre sou-edit1
Pre sou-edit1
 
Rapport projet
Rapport projetRapport projet
Rapport projet
 
VPN: SSL vs IPSEC
VPN: SSL vs IPSECVPN: SSL vs IPSEC
VPN: SSL vs IPSEC
 
3 switchport securité
3 switchport securité3 switchport securité
3 switchport securité
 
Mise en place d'un vpn site à site avec pfsense
Mise en place d'un vpn site à site avec pfsenseMise en place d'un vpn site à site avec pfsense
Mise en place d'un vpn site à site avec pfsense
 
Les commandes CISCO (routeur)
Les commandes CISCO (routeur)Les commandes CISCO (routeur)
Les commandes CISCO (routeur)
 
Cours syslog
Cours syslogCours syslog
Cours syslog
 
Weos tunnel ssl hôte à site
Weos   tunnel ssl hôte à siteWeos   tunnel ssl hôte à site
Weos tunnel ssl hôte à site
 
VTP(Virtual Trunking Protocol)
VTP(Virtual Trunking Protocol)VTP(Virtual Trunking Protocol)
VTP(Virtual Trunking Protocol)
 
Vlan-spanning tree
Vlan-spanning treeVlan-spanning tree
Vlan-spanning tree
 
Présentation sécurité open_ssl
Présentation sécurité open_sslPrésentation sécurité open_ssl
Présentation sécurité open_ssl
 
Présentation du portail captif Alcasar PPT avec tutoriel pratique illustré
Présentation du portail captif Alcasar PPT avec tutoriel pratique illustréPrésentation du portail captif Alcasar PPT avec tutoriel pratique illustré
Présentation du portail captif Alcasar PPT avec tutoriel pratique illustré
 
Cours 10 vlan
Cours 10 vlanCours 10 vlan
Cours 10 vlan
 
Tp snmp
Tp snmpTp snmp
Tp snmp
 
Ccnp securite vpn
Ccnp securite vpnCcnp securite vpn
Ccnp securite vpn
 
Services IP
Services IPServices IP
Services IP
 
Les Firewalls
Les FirewallsLes Firewalls
Les Firewalls
 

En vedette

Optimisation LAMP
Optimisation LAMPOptimisation LAMP
Optimisation LAMPcyruss666
 
Single nucleotide polymorphisms (sn ps), haplotypes,
Single nucleotide polymorphisms (sn ps), haplotypes,Single nucleotide polymorphisms (sn ps), haplotypes,
Single nucleotide polymorphisms (sn ps), haplotypes,Karan Veer Singh
 
PCR : Polymerase chain reaction : classique et en temps réel
PCR : Polymerase chain reaction : classique et en temps réelPCR : Polymerase chain reaction : classique et en temps réel
PCR : Polymerase chain reaction : classique et en temps réelNadia Terranti
 
Prédire des tendances et mesurer l’économie
Prédire des tendances et mesurer l’économiePrédire des tendances et mesurer l’économie
Prédire des tendances et mesurer l’économieTalkwalker
 
Présentation dscoop france
Présentation dscoop francePrésentation dscoop france
Présentation dscoop franceDscoop_EMEA
 
Formularios evelyn molina
Formularios evelyn molinaFormularios evelyn molina
Formularios evelyn molinaPameliitaPs
 
Projet aramis lpr.pps
Projet aramis lpr.ppsProjet aramis lpr.pps
Projet aramis lpr.ppsmerlin69
 
L'importance de la politique climat-énergie pour le nouveau Parlement européen
L'importance de la politique climat-énergie pour le nouveau Parlement européenL'importance de la politique climat-énergie pour le nouveau Parlement européen
L'importance de la politique climat-énergie pour le nouveau Parlement européenRAC-F
 
Vidéo en ligne Groupe 4
Vidéo en ligne Groupe 4Vidéo en ligne Groupe 4
Vidéo en ligne Groupe 4Lu Ding
 
The African Youth Momentum - version française 2015
The African Youth Momentum - version française 2015The African Youth Momentum - version française 2015
The African Youth Momentum - version française 2015Wilfried Adingra
 
Des idées pour mieux dormir
Des idées pour mieux dormir Des idées pour mieux dormir
Des idées pour mieux dormir Lematelas.fr
 
Et si le pouvoir d’action était plus fort que le pouvoir d'achat ?
Et si le pouvoir d’action était plus fort que le pouvoir d'achat ?Et si le pouvoir d’action était plus fort que le pouvoir d'achat ?
Et si le pouvoir d’action était plus fort que le pouvoir d'achat ?Jean-François Andro
 

En vedette (20)

Optimisation LAMP
Optimisation LAMPOptimisation LAMP
Optimisation LAMP
 
Single nucleotide polymorphisms (sn ps), haplotypes,
Single nucleotide polymorphisms (sn ps), haplotypes,Single nucleotide polymorphisms (sn ps), haplotypes,
Single nucleotide polymorphisms (sn ps), haplotypes,
 
PCR : Polymerase chain reaction : classique et en temps réel
PCR : Polymerase chain reaction : classique et en temps réelPCR : Polymerase chain reaction : classique et en temps réel
PCR : Polymerase chain reaction : classique et en temps réel
 
Prédire des tendances et mesurer l’économie
Prédire des tendances et mesurer l’économiePrédire des tendances et mesurer l’économie
Prédire des tendances et mesurer l’économie
 
Présentation dscoop france
Présentation dscoop francePrésentation dscoop france
Présentation dscoop france
 
Formularios evelyn molina
Formularios evelyn molinaFormularios evelyn molina
Formularios evelyn molina
 
Guava et Lombok au Lyon JUG
Guava et Lombok au Lyon JUGGuava et Lombok au Lyon JUG
Guava et Lombok au Lyon JUG
 
Projet aramis lpr.pps
Projet aramis lpr.ppsProjet aramis lpr.pps
Projet aramis lpr.pps
 
L'importance de la politique climat-énergie pour le nouveau Parlement européen
L'importance de la politique climat-énergie pour le nouveau Parlement européenL'importance de la politique climat-énergie pour le nouveau Parlement européen
L'importance de la politique climat-énergie pour le nouveau Parlement européen
 
Vidéo en ligne Groupe 4
Vidéo en ligne Groupe 4Vidéo en ligne Groupe 4
Vidéo en ligne Groupe 4
 
Journée ASIT VD 2014 - session 2
Journée ASIT VD 2014 - session 2Journée ASIT VD 2014 - session 2
Journée ASIT VD 2014 - session 2
 
The African Youth Momentum - version française 2015
The African Youth Momentum - version française 2015The African Youth Momentum - version française 2015
The African Youth Momentum - version française 2015
 
3èmes Rencontres ASIT VD : Cartographie et services d'interventions
3èmes Rencontres ASIT VD : Cartographie et services d'interventions3èmes Rencontres ASIT VD : Cartographie et services d'interventions
3èmes Rencontres ASIT VD : Cartographie et services d'interventions
 
Des idées pour mieux dormir
Des idées pour mieux dormir Des idées pour mieux dormir
Des idées pour mieux dormir
 
E-Marketing
E-MarketingE-Marketing
E-Marketing
 
Et si le pouvoir d’action était plus fort que le pouvoir d'achat ?
Et si le pouvoir d’action était plus fort que le pouvoir d'achat ?Et si le pouvoir d’action était plus fort que le pouvoir d'achat ?
Et si le pouvoir d’action était plus fort que le pouvoir d'achat ?
 
Lili06 bag 1305
Lili06 bag 1305Lili06 bag 1305
Lili06 bag 1305
 
Vizit
VizitVizit
Vizit
 
Perte et vol de mobile
Perte et vol de mobilePerte et vol de mobile
Perte et vol de mobile
 
Particulier
ParticulierParticulier
Particulier
 

Similaire à Push to the web - Websocket et SignalR

Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures repartiesMariem ZAOUALI
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Olivier Le Goaër
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Normandy JUG
 
Présentation Microsoft Advanced Threat Analytics | Deep-Dive - MSCloud Summi...
Présentation Microsoft Advanced Threat Analytics  | Deep-Dive - MSCloud Summi...Présentation Microsoft Advanced Threat Analytics  | Deep-Dive - MSCloud Summi...
Présentation Microsoft Advanced Threat Analytics | Deep-Dive - MSCloud Summi...☁️Seyfallah Tagrerout☁ [MVP]
 
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...sametmax
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec GoMickaël Rémond
 
3 Microsoft Advanced Threat Analytics - Genève
3   Microsoft Advanced Threat Analytics - Genève3   Microsoft Advanced Threat Analytics - Genève
3 Microsoft Advanced Threat Analytics - GenèveaOS Community
 
[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 à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaSIntroduction à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaSGerard Konan
 
chap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdfchap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdfdepinfo
 
MariaDB Paris Workshop 2023 - DARVA presentation
MariaDB Paris Workshop 2023 - DARVA presentationMariaDB Paris Workshop 2023 - DARVA presentation
MariaDB Paris Workshop 2023 - DARVA presentationMariaDB plc
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Kenny Dits
 
II - Archi_Couches_Basses.pdf
II - Archi_Couches_Basses.pdfII - Archi_Couches_Basses.pdf
II - Archi_Couches_Basses.pdfMeriemBalhaddad
 

Similaire à Push to the web - Websocket et SignalR (20)

Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
 
Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !Les Web Services en 60 diapos chrono !
Les Web Services en 60 diapos chrono !
 
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
Capacity Planning : Pratiques et outils pour regarder la foudre tomber sans p...
 
Présentation Microsoft Advanced Threat Analytics | Deep-Dive - MSCloud Summi...
Présentation Microsoft Advanced Threat Analytics  | Deep-Dive - MSCloud Summi...Présentation Microsoft Advanced Threat Analytics  | Deep-Dive - MSCloud Summi...
Présentation Microsoft Advanced Threat Analytics | Deep-Dive - MSCloud Summi...
 
technologie web
technologie webtechnologie web
technologie web
 
BSidesQuebec2013-ssl
BSidesQuebec2013-sslBSidesQuebec2013-ssl
BSidesQuebec2013-ssl
 
my_resume(fre)
my_resume(fre)my_resume(fre)
my_resume(fre)
 
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
Présentation de WAMP.ws, le protocole pour faire du PUB/SUB et RPC over Webso...
 
spring.pdf
spring.pdfspring.pdf
spring.pdf
 
Messaging temps réel avec Go
Messaging temps réel avec GoMessaging temps réel avec Go
Messaging temps réel avec Go
 
Les sockets.pptx
Les sockets.pptxLes sockets.pptx
Les sockets.pptx
 
3 Microsoft Advanced Threat Analytics - Genève
3   Microsoft Advanced Threat Analytics - Genève3   Microsoft Advanced Threat Analytics - Genève
3 Microsoft Advanced Threat Analytics - Genève
 
[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...
 
Cahier des charges
Cahier des charges Cahier des charges
Cahier des charges
 
Introduction à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaSIntroduction à Cloud Foundry et au PaaS
Introduction à Cloud Foundry et au PaaS
 
chap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdfchap 4 Sécurité des accès.pdf
chap 4 Sécurité des accès.pdf
 
Serveurs
ServeursServeurs
Serveurs
 
MariaDB Paris Workshop 2023 - DARVA presentation
MariaDB Paris Workshop 2023 - DARVA presentationMariaDB Paris Workshop 2023 - DARVA presentation
MariaDB Paris Workshop 2023 - DARVA presentation
 
Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?Monitoring applicatif : Pourquoi et comment ?
Monitoring applicatif : Pourquoi et comment ?
 
II - Archi_Couches_Basses.pdf
II - Archi_Couches_Basses.pdfII - Archi_Couches_Basses.pdf
II - Archi_Couches_Basses.pdf
 

Plus de MSDEVMTL

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.netMSDEVMTL
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2MSDEVMTL
 
Property based testing
Property based testingProperty based testing
Property based testingMSDEVMTL
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureMSDEVMTL
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataMSDEVMTL
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new featuresMSDEVMTL
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3MSDEVMTL
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018MSDEVMTL
 
Api gateway
Api gatewayApi gateway
Api gatewayMSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsMSDEVMTL
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureMSDEVMTL
 
Data science presentation
Data science presentationData science presentation
Data science presentationMSDEVMTL
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...MSDEVMTL
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreMSDEVMTL
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsMSDEVMTL
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageMSDEVMTL
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de casMSDEVMTL
 

Plus de MSDEVMTL (20)

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.net
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2
 
Property based testing
Property based testingProperty based testing
Property based testing
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft Azure
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & Data
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new features
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
 
Api gateway
Api gatewayApi gateway
Api gateway
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environments
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts Azure
 
Data science presentation
Data science presentationData science presentation
Data science presentation
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api core
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling Average
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de cas
 

Push to the web - Websocket et SignalR

  • 1. Push to the Web - Le protocole WebSocket et la librairie SignalR Dominic Marchand 9 février 2015
  • 2. À propos de moi • Développeur web depuis 1996 • Réseautique / DevOps • Agences et médias • Stack Microsoft • Aujourd’hui : backend électoral pour Radio-Canada @domimarch
  • 3. Aujourd’hui – Push to the web • Scénarios typiques • D’où on part • WebSocket • SignalR • Les bases • Connexions • Groupes • Sécurité • Performance / Scaling • Conclusion
  • 4. Scénarios typiques • HTTP = OK pour énormément de cas d’utilisation, mais pas toujours… • Discussions et messagerie en ligne (webchat) • Informations financières et boursières (stock tickers) • Enchères • Jeux • Résultats sportifs et électoraux • Consoles de monitoring et autres dashboards dynamiques • Capteurs (sensors)
  • 5. D’où on part • HTTP = stateless • Serveur ne peut pas « initier » un échange • Solutions inélégantes, workarounds Comet | HTTP server push | Pushlet | Long polling | Flash XMLSocket relays • Autres protocoles IRC | BitTorrent | Push Access Protocol
  • 6. WebSocket • Protocole/API issu du standard HTML5 offrant un canal de communication full-duplex sur une connexion TCP • Seul lien avec HTTP : le handshake se fait au moyen d'une requête HTTP/S de type UPGRADE • Communication se fait en TCP sur le port 80/443, donc firewall-friendly
  • 7. WebSocket – Support CLIENT • Firefox 6 • Safari 6 • Chrome 14 • Opera 12.10 • IE 10 • Inclut les versions mobiles de ces navigateurs SERVEUR • IIS 8 donc Windows 8 ou Windows Server 2012
  • 9. SignalR • Librairie ASP.NET pour applications real- time, 2-way • Développement et support par Microsoft • .NET Framework 4 • Open Source • Event-driven • Asynchronous • Scalable • Multiple transports • Librairies client pour javascript (browser) et .NET (server as client, WPF, WinForms, WinRT, WinPhone, Console, etc.) via Nuget
  • 11. SignalR – Transports • Support pour 4 différents types de transport; tout est géré de façon transparente par SignalR (aucune configuration) • Niveaux disponibles (dans cet ordre) • WebSocket [ requiert IIS 8 sur le serveur et .NET 4.5 pour le runtime ] • Server Sent Events / EventSource [ sans cross domain; IE ne supporte pas ] • Forever Frame [ utilisation d’un <iframe />, IE seulement ] • Ajax Long Polling
  • 13. SignalR – Cycle de vie d’une connexion • 3 niveaux d’abstraction de connexions • SignalR (lien logique entre un client et un URL, y’a un ConnectionId unique pour chaque connexion client/serveur) • Transport (lien logique qui est lié au type de transport utilisé) • Physique (câble réseau, lien wifi, routeurs, etc.) • Une perte de connexion du réseau PHYSIQUE n’implique PAS NÉCESSAIREMENT une perte de la connexion TRANSPORT
  • 14. SignalR – Cycle de vie d’une connexion • Start – déclenche le processus de handshake entre le client et le serveur, c’est là que la sélection du type de transport optimal s’effectue • ConnectionSlow – mécanisme de keepalive et disconnectTimeout – 10 secondes par défaut • Reconnecting – handshake est essayé à nouveau – la connexion logique n’est pas encore « perdue » • OnReconnected – indique à la connexion logique (sur le serveur) que le client a réussi à se rebrancher • OnDisconnected (serveur) / Closed (client) – la connexion physique a été perdue et le transport est fermé • Stop – la connexion logique SignalR est complètement terminée (volontaire ou non)
  • 15. SignalR – Cycle de vie d’une connexion
  • 16. SignalR – Cycle de vie d’une connexion
  • 17. SignalR – Cycle de vie d’une connexion
  • 18. SignalR – Cycle de vie d’une connexion
  • 19. SignalR – Cycle de vie d’une connexion • Les valeurs par défaut de KeepAlive (10 sec.), DisconnectTimeout (30 sec.) et ConnectionTimeout (110 sec., utilisé pour le long polling) peuvent être modifiées • Les événements ConnectionSlow, Reconnecting et Disconnected peuvent être utilisés pour informer le client de ce qui se passe • On peut automatiquement ré-appeler Start() dans le handler Disconnected pour continuellement reconnecter un client • Depuis SignalR 2.1, on peut aussi savoir si la fin d’une connexion était voulue ou pas (stopCalled sur serveur, lastError sur client) • Une option de debugging avancé est disponible pour voir plus de détails
  • 20. SignalR DEMO : Cycle de vie d’une connexion
  • 21. SignalR - Groupes • Un groupe représente un sous-ensemble d’utilisateurs à qui envoyer certains messages, donc qu’on ne veut pas broadcaster à tous (une chat room, un item spécifique dans une plate-forme d’enchères, une circonscription dans le cadre d’une élection, une partie spécifique pour un service de résultats sportifs, etc.) • Les groupes sont créés et supprimés automatiquement par SignalR et il n’y a pas d’API de gestion des groupes • Aucune persistence d’un « abonnement » à un groupe au-delà de la connexion logique SignalR, mais supporté lors d’un OnReconnected • Ce n’est PAS un mécanisme de sécurité
  • 23. SignalR - Sécurité • Y’a aucune mécanique d’authentification des utilisateurs dans SignalR; tout doit se faire en amont, dans l’application web qui « host » la couche SignalR • On peut cependant appliquer l’attribut Authorize sur un Hub ou sur une méthode spécifique d’un Hub • Si de l’information sensible est échangée par SignalR, il est fortement recommandé d’utiliser le protocole HTTPS/SSL/TLS qui fera aussi en sorte que les échanges WebSocket seront sécurisés (wss:// au lieu de ws://) • Les requêtes cross domain sont refusées par défaut; dans la mesure du possible, laisser tel quel mais c’est possible de les autoriser • Si on ne veut pas exposer tous les noms de méthodes disponibles sur un Hub, on peut désactiver la génération dynamique de proxy pour javascript • Ne pas retourner les exceptions aux clients; utilisez plutôt la méthode DisplayError dans vos catch()
  • 25. SignalR - Performance • Fréquence élevée (plusieurs messages par seconde) ? Batch • Réduire la taille des messages • Paramètres de performance sur le serveur • SignalR : DefaultMessageBufferSize • IIS : appConcurrentRequestLimit • ApplicationPool : queueLength et maxConcurrentRequestsPerCPU • Utiliser WebSocket (IIS 8 + .NET 4.5) si possibleCompteurs de performance disponibles (Microsoft.AspNet.SignalR.Utils) • Outils de load testing : Crank
  • 26. SignalR - Scaling • Si un serveur ne suffit plus, Scaleout ! • Trois backplanes disponibles (via Nuget) : • Azure Service Bus • Redis • SQL Server • Une seule ligne de configuration ! GlobalHost.DependencyResolver.UseServiceBus(connString, "MyApp"); • Attention : backplane peut devenir un bottleneck
  • 27. SignalR - Conclusion • Idéal pour les scénarios évoqués au début de la session • Même si WebSocket n’est pas disponible (IIS < 8 et .NET < 4.5), allez-y quand même • Facile à implémenter, autant du côté serveur que client • Pour des scénarios à petit ou moyen volume, c’est plug-and-play • Pour des scénarios à grand volume, il faudra assurément fine tuner les serveurs • Pour des scénarios à grande fréquence, il faudra probablement ajuster le code • Bien documenté et communauté active d’utilisateurs