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

Programmation web asynchrone avec Tornado

on

  • 2,082 vues

 

Statistics

Vues

Total Views
2,082
Views on SlideShare
1,955
Embed Views
127

Actions

Likes
0
Downloads
12
Comments
0

5 Ajouts 127

http://lanyrd.com 81
http://news.humancoders.com 33
http://www.linkedin.com 8
http://www.twylah.com 4
https://www.linkedin.com 1

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.
    Are you sure you want to
    Votre message apparaîtra ici
    Processing...
Poster un commentaire
Modifier votre commentaire

Programmation web asynchrone avec Tornado Programmation web asynchrone avec Tornado Presentation Transcript

  • Développement web asynchrone avec Tornado Ronan Amicel @amicel PyCon FR – Paris – 15 septembre 2012
  • 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 web.py ou webapp – exploite l’infrastructure non-bloquante sous-jacente
  • 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()
  • (Some) Batteries Included• Moteur de templates• Localisation• Client HTTP asynchrone• Client MySQL asynchrone• OpenID et OAuth (Twitter, Facebook, Google)• Web Socket
  • 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
  • Mises à jour « temps réel » Polling Long Polling Streaming (Ajax) (Comet) (Web Socket) événements événements événementsNavigateur Serveur Navigateur Serveur Navigateur Serveur
  • 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"
  • 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);};
  • 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()
  • 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()
  • 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()
  • 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 licence Apache 2.0• Juillet 2010 : Tornado 1.0• Juin 2011 : Tornado 2.0• Septembre 2012 : Tornado 2.4
  • Les côtés négatifs• Asynchrone – Moins lisible que du code synchrone – Plus complexe à déboguer• Communauté – Moins populaire que Django, Flask, Pyramid...
  • Ressources• http://www.tornadoweb.org/• http://pypi.python.org/pypi/tornado• https://github.com/facebook/tornado/