0
Développement web asynchrone        avec Tornado                Ronan Amicel                   @amicel      PyCon FR – Par...
Ronan Amicel• Entrepreneur• Startup advisor• Python !
Tornado c’est quoi ?• Un serveur web  – scalable et non-bloquant (utilise epoll ou kqueue)• Un framework web  – proche de ...
Bonjour les gens !import tornado.ioloopimport tornado.webclass MainHandler(tornado.web.RequestHandler):    def get(self): ...
(Some) Batteries Included•   Moteur de templates•   Localisation•   Client HTTP asynchrone•   Client MySQL asynchrone•   O...
Cas dutilisation•   Seul ou en complément dun framework « classique »•   Sites à forte charge (milliers de requêtes / seco...
Mises à jour « temps réel »         Polling                            Long Polling                                Streami...
Web Socket                (côté serveur)from tornado.websocket import WebSocketHandlerclass EchoWebSocket(WebSocketHandler...
Web Socket                   (côté client)var ws = new WebSocket("ws://localhost:8888/websocket");ws.onopen = function () ...
Requêtes asynchronesfrom tornado.httpclient import AsyncHTTPClientfrom tornado.web import RequestHandler, asynchronousclas...
Masquer les callbacks          avec tornado.genfrom tornado.gen import engine, Taskfrom tornado.httpclient import AsyncHTT...
Tâches concurrentes          avec tornado.genclass MyRequestHandler(RequestHandler):   @asynchronous   @engine   def get(s...
Bibliothèques asynchrones•   PostgreSQL•   MongoDB•   Redis•   Memcache•   RabbitMQ
Qui utilise Tornado ?focus.io
Historique•   2007 : FriendFeed•   Août 2009 : rachat par Facebook•   Septembre 2009 : première version diffusée sous lice...
Les côtés négatifs• Asynchrone – Moins lisible que du code synchrone – Plus complexe à déboguer• Communauté – Moins popula...
Ressources•   http://www.tornadoweb.org/•   http://pypi.python.org/pypi/tornado•   https://github.com/facebook/tornado/
Prochain SlideShare
Chargement dans... 5
×

Programmation web asynchrone avec Tornado

1,873

Published on

Published in: Technologies
0 commentaires
2 mentions J'aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Total des vues
1,873
Sur Slideshare
0
À partir des ajouts
0
Nombre d'ajouts
4
Actions
Partages
0
Téléchargements
17
Commentaires
0
J'aime
2
Ajouts 0
No embeds

No notes for slide

Transcript of "Programmation web asynchrone avec Tornado"

  1. 1. Développement web asynchrone avec Tornado Ronan Amicel @amicel PyCon FR – Paris – 15 septembre 2012
  2. 2. Ronan Amicel• Entrepreneur• Startup advisor• Python !
  3. 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. 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. 5. (Some) Batteries Included• Moteur de templates• Localisation• Client HTTP asynchrone• Client MySQL asynchrone• OpenID et OAuth (Twitter, Facebook, Google)• Web Socket
  6. 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. 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. 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. 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. 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. 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. 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. 13. Bibliothèques asynchrones• PostgreSQL• MongoDB• Redis• Memcache• RabbitMQ
  14. 14. Qui utilise Tornado ?focus.io
  15. 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. 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. 17. Ressources• http://www.tornadoweb.org/• http://pypi.python.org/pypi/tornado• https://github.com/facebook/tornado/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×