• J'aime
Programmation web asynchrone avec Tornado
Prochain SlideShare
Chargement dans... 5
×

Programmation web asynchrone avec Tornado

  • 1,699 vues
Transféré le

 

Plus dans : Technologies
  • Full Name Full Name Comment goes here.
    Êtes-vous sûr de vouloir
    Votre message apparaîtra ici
    Soyez le premier à commenter
Aucun téléchargement

Vues

Total des vues
1,699
Sur Slideshare
0
À partir des ajouts
0
Nombre d'ajouts
3

Actions

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

Ajouts 0

No embeds

Signaler un contenu

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
    No notes for slide

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/