Created
July 21, 2012 07:31
-
-
Save c4pt0r/3154974 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#encoding=utf-8 | |
#simple http/sockJS comet server written by huangdx | |
import tornado.ioloop | |
import tornado.web | |
import sockjs.tornado | |
import json | |
class TestHandler(tornado.web.RequestHandler): | |
def get(self): | |
self.render('index.html') | |
class StatusHandler(tornado.web.RequestHandler): | |
def get(self): | |
online = len(CometConnection.user_map.items()) | |
self.write(json.dumps({'online':online})) | |
class PostHandler(tornado.web.RequestHandler): | |
def post(self): | |
data = self.get_argument('data', '') | |
users = self.get_argument('users','') | |
is_all = self.get_argument('is_all', '') | |
if is_all != '1': | |
users = users.split(',') | |
clients = [clients for uname, clients in CometConnection.user_map.items() if uname in users] | |
CometService.broadcast(clients, data) | |
else: | |
CometService.broadcast(CometConnection.user_map.values(), data) | |
class CometConnection(sockjs.tornado.SockJSConnection): | |
user_map = dict() | |
def on_open(self, info): | |
pass | |
def on_message(self, message): | |
data = json.loads(message) | |
username = data['user'] | |
cmd = data['cmd'] | |
if cmd == 'sub': | |
if username in self.user_map.keys(): | |
self.user_map[username].close() | |
self.user_map[username] = self | |
print username, 'subscribed!' | |
def on_close(self): | |
print 'on close' | |
for uname, client in self.user_map.items(): | |
if client == self: | |
del self.user_map[uname] | |
CometService = sockjs.tornado.SockJSRouter(CometConnection, '/comet') | |
if __name__ == '__main__': | |
import logging | |
logging.getLogger().setLevel(logging.DEBUG) | |
app = tornado.web.Application( | |
[(r"/post", PostHandler), | |
(r"/status", StatusHandler), | |
(r'/test', TestHandler)] + CometService.urls | |
) | |
app.listen(18081) | |
tornado.ioloop.IOLoop.instance().start() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment