в течение нескольких дней я безуспешно пытался создать какой-то цикл на стороне сервера, который позволил бы мне периодически обновлять клиент, но похоже, что если вы поместите цикл в метод события сервера, он перестанет генерировать события для клиент автоматически. Я чувствую, что «gevent» (или гринлеты) не допускают такого поведения (только клиенты, браузеры, использующие socket.io, могут периодически отправлять на сервер, а не наоборот). Я ошибаюсь? Как бы вы решили эту проблему? Возможно ли, что если вы сделаете цикл, соединение с клиентом (сокетом) каким-то образом потеряется? Прилагаю небольшой набросок со схемой.
// Client (socket.io) [Javascript]
client = io.connect('/space');
client.on('do_something', function (msg) {
// Do something.
});
client.on('do_another_thing', function (msg) {
// Do another thing.
});
client.emit('something', msg);
# Server (gevent-socketio) [Python]
@namespace('/space')
class SpaceNamespace:
def on_something(msg):
# This WORKS just fine cause it's out the scope of the loop.
self.emit('do_another_thing', some_operation(msg))
# This DOES NOT work.
while True:
# Each 3 seconds update the client.
self.emit('do_something', some_operation(msg))
time.sleep(3)
# If you put an ipdb here, you can see like the code
# is executed, but the browser doesn't receive any
# event.
Спасибо!
self.emit
(без какого-либо цикла) в методеon_something
к тому, что оба работают? - person sberry   schedule 22.09.2013gevent.sleep(3)
- person sberry   schedule 22.09.2013