Skip to content

Instantly share code, notes, and snippets.

@xianyunwuxin
Created December 7, 2011 01:54
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save xianyunwuxin/1441063 to your computer and use it in GitHub Desktop.
Save xianyunwuxin/1441063 to your computer and use it in GitHub Desktop.
Make Flask work with Tornado.websocket
from flask import Flask
app=Flask(__name__)
@app.route('/')
def index():
return """
<span id="now">loading<span>
<script type="text/javascript">
window.WebSocket=window.WebSocket || window.MozWebSocket || false;
if(!window.WebSocket){
alert("No WebSocket Support");
}else {
var ws=new WebSocket("ws://"+location.host+"/now");
var now_el=document.getElementById("now");
ws.onmessage=function(e){
now_el.innerHTML=e.data;
}
ws.onclose=function(){
now_el.innerHTML='closed';
}
}
</script>
"""
import time
import tornado.web
from tornado.websocket import WebSocketHandler
from tornado.ioloop import PeriodicCallback,IOLoop
import tornado.wsgi
class NowHandler(WebSocketHandler):
clients=set()
@staticmethod
def echo_now():
for client in NowHandler.clients:
client.write_message(time.ctime())
def open(self):
NowHandler.clients.add(self)
def on_close(self):
NowHandler.clients.remove(self)
wsgi_app=tornado.wsgi.WSGIContainer(app)
application=tornado.web.Application([
(r'/now',NowHandler),
(r'.*',tornado.web.FallbackHandler,{'fallback':wsgi_app })
])
PeriodicCallback(NowHandler.echo_now,1000).start()
application.listen(5000)
IOLoop.instance().start()
@notedit
Copy link

notedit commented Feb 16, 2014

hi have you used this in your production?

i am finding a way to make sockjs-tornado working with flask

@AlJohri
Copy link

AlJohri commented Apr 2, 2014

hey, same question -- were you able to use this reliably?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment