我使用 PikaClient 在龙卷风中连接到 RabbitMQ,我将 RabbitMQ 龙卷风演示中的单个客户端更改为客户端字典,以便我可以处理多个用户。
现在我使用 ajax 在网页中每 5 秒获取一次新消息,它可以工作,但是在用户关闭浏览器中的连接后,PikaClient 连接没有关闭,每次新请求到来时,RabbitMQ 的套接字描述符数都会不断增加。
我需要在连接关闭时关闭 pikaclient 连接
@tornado.web.asynchronous
def get(self):
uid = self.get_argument(“uid”, “0”)
self.uid = uid
if self.application.pika.has_key(uid):
pass
else:
self.application.pika[uid] = PikaClient(uuid=str(uid))
self.application.pika[uid].connect()
self.on_ajaxdone(uid)
def on_ajaxdone(self, uid):
if self.request.connection.stream.closed():
return
self.set_header("Content-type", "application/json")
self.write(json.dumps(self.application.pika[uid].get_messages()))
self.finish()
def on_connection_close(self):
try:
self.application.pika[self.uid].connection.close()
except:
pass
finally:
self.application.pika.pop(self.uid)
但是代码不行,我把on_ajaxdone改成add_timeout,当timeout>2s时,好像可以了
tornado.ioloop.IOLoop.instance().add_timeout(
time.time() + 5,
lambda: self.on_ajaxdone(uid))
我可以在没有任何超时的情况下处理 on_connection_close 吗?