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

时间:2012-12-12 03:22:13

标签: rabbitmq tornado

我使用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吗?

0 个答案:

没有答案