我使用PikaClient连接到龙卷风中的RabbitMQ,我将RabbitMQ龙卷风演示中的单个客户端更改为客户端dict,这样我就可以处理多个用户。
现在我使用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,当超时> 2s时,它似乎正常工作
tornado.ioloop.IOLoop.instance().add_timeout(
time.time() + 5,
lambda: self.on_ajaxdone(uid))
我可以在没有超时的情况下处理on_connection_close吗?