Rabbitmq 如何处理龙卷风中的连接关闭
我使用PikaClient连接到tornado中的RabbitMQ,我将RabbitMQ tornado演示中的单个客户端更改为一个客户端dict,以便可以处理多个用户 现在我使用ajax在网页中每隔5秒获取一条新消息,它可以正常工作,但在用户在浏览器中关闭连接后,PikaClient连接不会关闭,RabbitMQ的套接字描述符数会随着每次新请求的出现而不断增加 我需要在连接关闭时关闭pikaclient连接Rabbitmq 如何处理龙卷风中的连接关闭,rabbitmq,tornado,Rabbitmq,Tornado,我使用PikaClient连接到tornado中的RabbitMQ,我将RabbitMQ tornado演示中的单个客户端更改为一个客户端dict,以便可以处理多个用户 现在我使用ajax在网页中每隔5秒获取一条新消息,它可以正常工作,但在用户在浏览器中关闭连接后,PikaClient连接不会关闭,RabbitMQ的套接字描述符数会随着每次新请求的出现而不断增加 我需要在连接关闭时关闭pikaclient连接 @tornado.web.asynchronous def get(self):
@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)
但代码不起作用,我将在_ajaxdone上更改为add_timeout,当超时>2s时,它似乎起作用
tornado.ioloop.IOLoop.instance().add_timeout(
time.time() + 5,
lambda: self.on_ajaxdone(uid))
我可以在没有任何超时的情况下处理连接关闭吗?上次发布后有任何更新吗?如果您将on_连接更改为on_finish,会怎么样。您是否可以为每个请求关闭
PikaClient
?