Web temps-réel (ou quasi) avec Python - AFPY · Web temps-réel (ou quasi) avec Python La cantine...
Transcript of Web temps-réel (ou quasi) avec Python - AFPY · Web temps-réel (ou quasi) avec Python La cantine...
Web temps-réel (ou quasi) avec PythonLa cantine (Paris) - 2011-11-28
Monday, November 28, 11
• Web craftsman
• Writing opensource for a living
• @benoitc
Benoît Chesneau
Monday, November 28, 11
Apache CouchDBhttp://couchdb.apache.org
Monday, November 28, 11
Web temps-réel (ou quasi) avec Python
Monday, November 28, 11
?Monday, November 28, 11
• Il ne s’agit pas de de recevoir des news plus rapidement
Monday, November 28, 11
Pousser les données
Monday, November 28, 11
client server
Monday, November 28, 11
client server
Monday, November 28, 11
• comet
• long-polling
• connexion continue
• websockets
• event source
Monday, November 28, 11
Monday, November 28, 11
No!
Monday, November 28, 11
Monday, November 28, 11
Monday, November 28, 11
Monday, November 28, 11
Client
serveur HTTP
Application Python
Monday, November 28, 11
• pas incompatible avec WSGI
• peut aussi fonctionner dans votre framework (django, flask, pyramid, ...)
• Streamer & Itérer
Monday, November 28, 11
• Paralléliser
• Librairies Asynchrones
• Frameworks
stdlib
Monday, November 28, 11
• twisted
• Gevent & Eventlet
• Tornado
• Gunicorn
librairies asynchrones
Monday, November 28, 11
Gevent & socket.io
<script src="/socket.io/socket.io.js""></script> <script> var socket = io.connect( 'http://localhost'); socket.on('news', function(data) { console.log(data); socket.emit('my other event’, { my: 'data' }); }); </script>
Monday, November 28, 11
Gevent & socket.io
def hello_world(environ, start_response): if not environ['PATH_INFO'].startswith('/socket.io'): return serve_file(environ, start_response) socketio = environ[ 'socketio'] while True: socketio.send('Hello, world') gevent .sleep(2)
Monday, November 28, 11
Tornado + Websockets
var ws = new WebSocket("ws://friendfeed.com/websocket");ws.onopen = function() { ws.send("This is a message from the browser to the server");};ws.onmessage = function(event) { alert("The server sent a message: " + event.data);};
Monday, November 28, 11
Tornado + Websockets
class EchoWebSocket(tornado.websocket.WebSocketHandler): def open(self): self.receive_message(self.on_message)
def on_message(self, message): self.write_message(u"You said: " + message)
Monday, November 28, 11
Monday, November 28, 11
• stackless
• greenlets
• py.py --withmod-_stackless
http://www.grant-olson.net/python/intro-to-stackless-python
stacklessMonday, November 28, 11
• hookbox : http://hookbox.org
• moksha https://fedorahosted.org/moksha/
autres frameworksMonday, November 28, 11
gunicorn
• gère les websockets
• gevent & eventlet
• ‘gunicorn.socket’
Monday, November 28, 11
merci! questions?
@benoitcMonday, November 28, 11