Skip to content

Instantly share code, notes, and snippets.

@lanius
Created May 6, 2012 03:51
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 lanius/2610158 to your computer and use it in GitHub Desktop.
Save lanius/2610158 to your computer and use it in GitHub Desktop.
Handle URL pattern in WebSocketHandler for Tornado
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Tornado WebSocket Sample</title>
</head>
<body>
<input type="text" id="username" value="myname" />
<button id="connect">connect</button>
<div id="result"></div>
<script>
var $ = function (id) {
return document.getElementById(id);
};
$('connect').addEventListener('click', function () {
var username = $('username').value;
$('username').value = "";
var sock = new WebSocket('ws://localhost:8888/user/' + username);
sock.onopen = function () {
console.log('opened.');
};
sock.onclose = function () {
console.log('closed.');
};
sock.onerror = function () {
console.log('error.');
};
sock.onmessage = function (evt) {
$('result').innerText = evt.data;
};
});
</script>
</body>
</html>
# -*- coding: utf-8 -*-
"""
Regular expression groups in URL pattern are passed as arguments to "open"
method of tornado.websocket.WebSocketHandler
"""
from tornado.web import RequestHandler, Application
from tornado.websocket import WebSocketHandler
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
class IndexHandler(RequestHandler):
def get(self):
self.render('index.html')
class SampleWebSocket(WebSocketHandler):
def open(self, username):
print(u"opened.")
self.write_message(u"you're name is {0}".format(username))
# You can also get arguments from 'self.open_args'
self.close()
def on_message(self, message):
pass
def on_close(self):
print(u"closed.")
settings = {'auto_reload': True, 'debug': True}
app = Application([
(r'/', IndexHandler),
(r'/user/(.*)', SampleWebSocket),
], **settings)
def main():
http_server = HTTPServer(app)
http_server.listen(8888)
IOLoop.instance().start()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment