Add on_connection_close hook to chat demo to clean up after closed connections.
Closes #354.
This commit is contained in:
parent
12c5699eb7
commit
1b5adf99e4
|
@ -62,7 +62,7 @@ class MainHandler(BaseHandler):
|
|||
|
||||
|
||||
class MessageMixin(object):
|
||||
waiters = []
|
||||
waiters = set()
|
||||
cache = []
|
||||
cache_size = 200
|
||||
|
||||
|
@ -77,7 +77,11 @@ class MessageMixin(object):
|
|||
if recent:
|
||||
callback(recent)
|
||||
return
|
||||
cls.waiters.append(callback)
|
||||
cls.waiters.add(callback)
|
||||
|
||||
def cancel_wait(self, callback):
|
||||
cls = MessageMixin
|
||||
cls.waiters.remove(callback)
|
||||
|
||||
def new_messages(self, messages):
|
||||
cls = MessageMixin
|
||||
|
@ -87,7 +91,7 @@ class MessageMixin(object):
|
|||
callback(messages)
|
||||
except:
|
||||
logging.error("Error in waiter callback", exc_info=True)
|
||||
cls.waiters = []
|
||||
cls.waiters = set()
|
||||
cls.cache.extend(messages)
|
||||
if len(cls.cache) > self.cache_size:
|
||||
cls.cache = cls.cache[-self.cache_size:]
|
||||
|
@ -114,7 +118,7 @@ class MessageUpdatesHandler(BaseHandler, MessageMixin):
|
|||
@tornado.web.asynchronous
|
||||
def post(self):
|
||||
cursor = self.get_argument("cursor", None)
|
||||
self.wait_for_messages(self.async_callback(self.on_new_messages),
|
||||
self.wait_for_messages(self.on_new_messages,
|
||||
cursor=cursor)
|
||||
|
||||
def on_new_messages(self, messages):
|
||||
|
@ -123,6 +127,9 @@ class MessageUpdatesHandler(BaseHandler, MessageMixin):
|
|||
return
|
||||
self.finish(dict(messages=messages))
|
||||
|
||||
def on_connection_close(self):
|
||||
self.cancel_wait(self.on_new_messages)
|
||||
|
||||
|
||||
class AuthLoginHandler(BaseHandler, tornado.auth.GoogleMixin):
|
||||
@tornado.web.asynchronous
|
||||
|
|
Loading…
Reference in New Issue