Programmation web asynchrone avec Tornado
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Programmation web asynchrone avec Tornado

le

  • 2,213 vues

 

Statistiques

Vues

Total des vues
2,213
Vues sur SlideShare
2,082
Vues externes
131

Actions

J'aime
1
Téléchargements
13
Commentaires
0

5 Ajouts 131

http://lanyrd.com 83
http://news.humancoders.com 33
http://www.linkedin.com 8
http://www.twylah.com 4
https://www.linkedin.com 3

Accessibilité

Catégories

Détails de l'import

Uploaded via as Adobe PDF

Droits d'utilisation

© Tous droits réservés

Report content

Signalé comme inapproprié Signaler comme inapproprié
Signaler comme inapproprié

Indiquez la raison pour laquelle vous avez signalé cette présentation comme n'étant pas appropriée.

Annuler
  • Full Name Full Name Comment goes here.
    Êtes-vous sûr de vouloir
    Votre message apparaîtra ici
    Processing...
Poster un commentaire
Modifier votre commentaire

Programmation web asynchrone avec Tornado Presentation Transcript

  • 1. Développement web asynchrone avec Tornado Ronan Amicel @amicel PyCon FR – Paris – 15 septembre 2012
  • 2. Ronan Amicel• Entrepreneur• Startup advisor• Python !
  • 3. Tornado c’est quoi ?• Un serveur web – scalable et non-bloquant (utilise epoll ou kqueue)• Un framework web – proche de web.py ou webapp – exploite l’infrastructure non-bloquante sous-jacente
  • 4. Bonjour les gens !import tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler): def get(self): self.write("Bonjour les gens !")application = tornado.web.Application([ (r"/", MainHandler),])if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
  • 5. (Some) Batteries Included• Moteur de templates• Localisation• Client HTTP asynchrone• Client MySQL asynchrone• OpenID et OAuth (Twitter, Facebook, Google)• Web Socket
  • 6. Cas dutilisation• Seul ou en complément dun framework « classique »• Sites à forte charge (milliers de requêtes / seconde)• Messagerie instantanée, chat rooms• Requêtes dépendant de services externes à latence variable (API Facebook, Twitter, etc.)• Mises à jour « temps réel » dans une page web
  • 7. Mises à jour « temps réel » Polling Long Polling Streaming (Ajax) (Comet) (Web Socket) événements événements événementsNavigateur Serveur Navigateur Serveur Navigateur Serveur
  • 8. Web Socket (côté serveur)from tornado.websocket import WebSocketHandlerclass EchoWebSocket(WebSocketHandler): def open(self): print "WebSocket opened" def on_message(self, message): self.write_message(u"You said: " + message) def on_close(self): print "WebSocket closed"
  • 9. Web Socket (côté client)var ws = new WebSocket("ws://localhost:8888/websocket");ws.onopen = function () { ws.send("Hello, world");};ws.onmessage = function (evt) { alert(evt.data);};
  • 10. Requêtes asynchronesfrom tornado.httpclient import AsyncHTTPClientfrom tornado.web import RequestHandler, asynchronousclass MyRequestHandler(RequestHandler): @asynchronous def get(self): http = AsyncHTTPClient() http.fetch(http://friendfeed.com/, self._on_download) def _on_download(self, response): self.write(Downloaded!) self.finish()
  • 11. Masquer les callbacks avec tornado.genfrom tornado.gen import engine, Taskfrom tornado.httpclient import AsyncHTTPClientfrom tornado.web import RequestHandler, asynchronousclass MyRequestHandler(RequestHandler): @asynchronous @engine def get(self): http = AsyncHTTPClient() response = yield Task(http.fetch, http://friendfeed.com/) self.write(Downloaded!) self.finish()
  • 12. Tâches concurrentes avec tornado.genclass MyRequestHandler(RequestHandler): @asynchronous @engine def get(self): http = AsyncHTTPClient() response1, response2 = yield [ Task(http.fetch, url1), Task(http.fetch, url2), ] self.write(Downloaded!) self.finish()
  • 13. Bibliothèques asynchrones• PostgreSQL• MongoDB• Redis• Memcache• RabbitMQ
  • 14. Qui utilise Tornado ?focus.io
  • 15. Historique• 2007 : FriendFeed• Août 2009 : rachat par Facebook• Septembre 2009 : première version diffusée sous licence Apache 2.0• Juillet 2010 : Tornado 1.0• Juin 2011 : Tornado 2.0• Septembre 2012 : Tornado 2.4
  • 16. Les côtés négatifs• Asynchrone – Moins lisible que du code synchrone – Plus complexe à déboguer• Communauté – Moins populaire que Django, Flask, Pyramid...
  • 17. Ressources• http://www.tornadoweb.org/• http://pypi.python.org/pypi/tornado• https://github.com/facebook/tornado/