Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rabbitmq 如何处理龙卷风中的连接关闭_Rabbitmq_Tornado - Fatal编程技术网

Rabbitmq 如何处理龙卷风中的连接关闭

Rabbitmq 如何处理龙卷风中的连接关闭,rabbitmq,tornado,Rabbitmq,Tornado,我使用PikaClient连接到tornado中的RabbitMQ,我将RabbitMQ tornado演示中的单个客户端更改为一个客户端dict,以便可以处理多个用户 现在我使用ajax在网页中每隔5秒获取一条新消息,它可以正常工作,但在用户在浏览器中关闭连接后,PikaClient连接不会关闭,RabbitMQ的套接字描述符数会随着每次新请求的出现而不断增加 我需要在连接关闭时关闭pikaclient连接 @tornado.web.asynchronous def get(self):

我使用PikaClient连接到tornado中的RabbitMQ,我将RabbitMQ tornado演示中的单个客户端更改为一个客户端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)
但代码不起作用,我将在_ajaxdone上更改为add_timeout,当超时>2s时,它似乎起作用

tornado.ioloop.IOLoop.instance().add_timeout(
        time.time() + 5,
        lambda: self.on_ajaxdone(uid))

我可以在没有任何超时的情况下处理连接关闭吗?

上次发布后有任何更新吗?如果您将on_连接更改为on_finish,会怎么样。您是否可以为每个请求关闭
PikaClient