Чат на gevent+django+rabbitmq

160 views
Skip to first unread message

smglab

unread,
Feb 16, 2011, 10:38:39 AM2/16/11
to gevent: coroutine-based Python network library
Привет,
в общем я такую связку в одном проекте
лонг пулл, жду сообщения из rabbitmq, потом wait gevent и сбрасываю
его в функции которая обрабатывает сообщение из рабита

def message_updates(self, request):
user = request.session['user_session']
conn = get_connect_amqp(chat_log)
ch = conn.channel()

def new_message_ready(msg):
self.re_format = re.compile('\n|\r\n')
self.user_message[msg.delivery_info['consumer_tag']] =
msg.body
self.user_event[msg.delivery_info['consumer_tag']].set()
ch.basic_ack(msg.delivery_tag)

ename = 'exchange_%s' % user.id
qname = 'queue_%s' % session.session_id
ch.queue_declare(queue=qname, durable=True, exclusive=False,
auto_delete=False)
ch.exchange_declare(ename, type="fanout", durable=True,
auto_delete=False)
ch.queue_bind(queue=qname, exchange=ename)
tag = ch.basic_consume(queue=qname,
callback=new_message_ready, no_ack=False)
self.user_message[tag] = ''
self.user_event[tag] = Event()

ch.wait()

self.user_event[tag].wait()
result = self.user_message[tag]
del self.user_event[tag]
del self.user_message[tag]
ch.basic_cancel(tag)

проблема отловить момент когда пользователь со стороны браузера
разрывает соединение и
сбросить события
я так понимаю libevent-http не обрабатывает закрытие соединения, может
у кого нить есть идея как это обойти

заранее спасибо

stanislav suhoparov

unread,
Aug 4, 2011, 1:34:10 PM8/4/11
to geve...@googlegroups.com


16 февраля 2011 г. 18:38 пользователь smglab <shaba...@gmail.com> написал:

Четение 0 байт означает что сервер закрыл соединие, любая нормальня обертка для событийной библиотеке далжна иметь метод что-то типа onClose()

Reply all
Reply to author
Forward
0 new messages