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




lundi 4 avril 2011

Ruby : quelques ressources !

Bonjour,

Pendant ma présentation du langage Ruby (lien) au CodeCamp le samedi 02 Avril 2011, j'avais promis de partager avec vous mes sources! Voici quelques liens qui vous seront très utiles :

http://www.ruby-lang.org/fr
- http://rubyflow.com
- http://rubyinside.com
- http://tryruby.org
http://screencasts.org/
- http://rubyusergroup.blogspot.com  
- http://railscasts.com
http://confreaks.net/events
http://teachmetocode.com/
http://rubycorner.com/blogs/lang/fr   (liste des blogs francophones )


Blogs personnels 

  1. Aaron Quint – QuirkeyBlog
  2. Adam Keys – The Real Adam
  3. Adam Wiggins – A Tornado of RazorBlades
  4. Amanda & Michael Morin – Amanda and Michael’s Ruby Blog
  5. Amy Hoy – Slash7
  6. Antonio Cangiano – Zen and the Art of Programming
  7. Brian Dainto – The Budding Rubyist
  8. Brian Eng & Jeff Cohen – Softies on Rails
  9. Brian Marick – Exploration Through Example
  10. Bruce Williams – Codefluency
  11. Chad Fowler – Chad Fowler
  12. Charles Nutter – Headius
  13. Chris O’Sullivan – The Chris O Show
  14. Dave Thomas – PragDave
  15. David Heinemeier Hansson – Loud Thinking
  16. Derek Neighbors – Derek Neighbors
  17. Dr Nic Williams – Dr Nic
  18. Eric Hodel – Segment7
  19. Evan Phoenix – evan.musing
  20. Ezra Zygmuntowicz – Brainspl.at
  21. Eldon Alameda – Simplifies
  22. Eric Falcao – austin entrepreneur
  23. Fabio Akita – AkitaOnRails.com (Portuguese)
  24. Geoffrey Grosenbach – Nuby on Rails
  25. Giles Bowkett – Giles Bowkett
  26. Graeme Mathieson – Rubaidh
  27. Gregg Pollack & Jason Seifer – Rails Envy
  28. Ilya Grigorik – igvita.com
  29. Jade Meskill – iamruinous
  30. James Golick – James on Software
  31. Jamie van Dyke – FearOfFish
  32. Jamis Buck – the { buckblogs :here }
  33. Jay Fields – Jay Fields’ Thoughts
  34. Jay Phillips – Adhearsion Blog
  35. Jesse Newland – SoylentFoo
  36. Jim Weirich – { |one, step, back| }
  37. Joe O’Brien – 
    my not-so-barbaric yawlp
  38. John Lam – John Lam on Software
  39. John Nunemaker – RailsTips
  40. Josh Susser – has_many :through
  41. Lindsay Holmwood – auxesis’ musings
  42. Lyle Johnson – Lovable Lyle
  43. Manik Juneja – { :from => Delhi, :about => everything }
  44. Marc-Andre Cournoyer – macournoyer’s blog
  45. Matt Aimonetti – The Merbist
  46. Matt Todd – Paragon Adrift
  47. Michael Bleigh – Mister Bleigh
  48. Michael Ivey – Michael Ivey
  49. Michael Koziarski – The Rails Way
  50. Mike Gunderloy – A Fresh Cup
  51. Mike Perham – Mike Perham
  52. Mislav Marohnic – No strings attached
  53. Nick Plante – zerosum dirt(nap)
  54. Nick Quaranto – Litany Against Fear
  55. Obie Fernandez – Obie Fernandez
  56. Pat Eyler – On Ruby
  57. Peat Bakke – Peat Dot Org
  58. Peter Cooper – Peter Cooper’s Blog
  59. Peter Szinek – Ruby, Rails, Web2.0
  60. Pratik Naik – 
    has_many :bugs, :through => :rails
  61. PJ Hyett & Chris Wanstrath – Err The Blog
  62. Rick Olson – techno weenie
  63. Richard Roberts – RichText
  64. Ryan Bates – RailsCasts
  65. Ryan Daigle – Ryan’s Scraps
  66. Ryan Tomayko – Ryan Tomayko
  67. Sau Sheong Chang – saush.com
  68. Steve Sanderson – Steve Sanderson
  69. Sur – Expressica::Blog
  70. Tim Kadom – Skiptree
  71. Tom Preston-Werner – Tom Preston-Werner
  72. Tobias Lutke – Too-biased
  73. Yehuda Katz – Katz Got Your Tongue?
  74. Yukihiro Matsumoto (Matz) – Matz’s Blog (Japanese)
  75. Zed Shaw – Zed’s Technical Blog

Blogs gérés par des entreprises

  1. Altoros – Blog on the Business of Software Product Development
  2. Dynamic50 – The Blog of the Fifty Group
  3. ELC Technologies – ELC Technologies
  4. Engine Yard – Union Station
  5. FiveRuns – FiveRuns Blog
  6. Heroku – Heroku| Blog
  7. Highgroove Studios – The Napkin
  8. MorphLabs – Morph Labs Staff Blog
  9. New Bamboo – Bamboo Blog
  10. Relevance Inc. – Relevance Blog
  11. RubyLearning – RubyLearning Blog
  12. Taazza – Taazza newsroom
  13. TheWebFellas – TheWebFellas
  14. Thoughtbot – Giant Robots
  15. Unspace – Rethink

Autres

  1. DB2 on Rails – DB2 on Rails
  2. Odd Thesis – Odd Thesis
  3. Rails on the Run – Rails on the Run
  4. RailsOnWave.com – RailsOnWave.com
  5. Ruby Best Practices – Ruby Best Practices
  6. RubyInside – RubyInside