jeudi 7 avril 2011

les websockets ? solutions aux limites du protocole HTTP ?




Hi mon premier post sur ce blog....
Découvrons le ensemble
Quelques mois auparavant Hassane Moustapha vous a parlé de REST et notamment du protocole HTTP . Je ne reviendrais donc pas dessus, je m'en vais juste soulever une limite majeure du protocole HTTP , limite qui a en partie vu le jour avec l'évolution du Web ( notamment le Web .2.0 ).
Je m'explique, l'utilisation du protocole HTTP implique que le client ( disons notre navigateur web ) doit ouvrir une connexion avec le serveur, effectuer sa requête, attendre la réponse du serveur, avant de la fermer. Aussi à chaque nouvelle connexion c'est ce même processus qui se répéte. Nous notons deux points essentiels
  • le serveur doit attendre une requête du client pour pouvoir lui envoyer les données qui lui sont destinées
  • la bande passante en souffre :)
  • Ce temps de latence implique dans le cas de systèmes à temps réel ( prenons le cas des bourses ) des pertes possibles d'argent
J'espere que vous me suivez toujours car on va bientôt entrer dans le vif du sujet. En effet le souci principal pour nous développeurs avec ce protocole c'est le besoin d'avoir une connexion constamment ouverte entre le client et le serveur permettant un échange de données en full duplex.Certains me diront qu'il existe des alternatives telles que Comet ( Hassane nous fera surement la grâce d'un article dessus).
Nous parlerons donc des Websockets qui via le HTML 5 est supporté par les applications web actuelles.

Le Protocole WebSocket

Ce protocole permet d'ouvrir une connexion permanente directionnelle entre le client et le serveur.
Comment ça se passe ?
Bah tres simplement, considérons que votre application charge un script javascript qui nécessite une connexion permanente avec le serveur. Une requête de type "upgrade" est faite afin de proceder à une mise à jour de la connexion de type TCP/HTTP vers le mode webSocket. Ca ressemble à peu prés à ça :

GET /text HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: www.example.com
Origin: http://example.com
WebSocket-Protocol: sample
Sec-WebSocket-Version: 6


qui donne

HTTP/1.1 101 Websocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://example.com
WebSocket-Location: ws://example.com/demo
WebSocket-Protocol: sample

Et voila cet échange initial est appelé "handshake" ( poignée de mains pour les francophones :) ) et devinez quoi ? la connexion entre le serveur et le client est établie.
Le client et le serveur peuvent alors échanger librement des informations l'un l'autre via
ce protocole. Le serveur vient push (pousser ) des données vers le client et n'est plus obligé d'attendre qu'il en fasse la demande d'abord.


L'API WEBSOCKET

Elle se veut tres simple. Aussi pour créer une instance de web socket il suffit de fournir l'url du serveur . Elle commence par ws:// ou wss:// ( pour une connexion sécurisée ). Ensuite l'interface fournit un certain nombre d'attributs permettant de gérer les évenements associés :

onopen : ouverture d'un websocket
onmessage : reception d'un message
onerror : en cas d'erreurs
onclose : fermeture de websocket
Les données envoyés par le serveur sont notifiés par l'événement onmessage. Aussi les webSocket fournissent deux méthodes :
  • send(data_string) pour envoyer un message au serveur
  • close() pour fermer la webSocket
Hummm je commence à être long la. Aussi je vais terminer par son implementation côté
serveur.
Je ne vais pas finir sans préciser ceci, les websocket representent une évolution importante
dans la communication client-serveur, toutefois d'importantes failles de sécurité ont été notées dont le cache poisonning. Ce qui fait que les websocket restent encore à l'état de brouillon, mais son évolution est ineluctable so

Wait and see...

quelques liens




Aucun commentaire:

Enregistrer un commentaire