Как сказал gs, просто держите соединение открытым.
Вот пример приложения WSGI, которое каждую секунду отправляет текущее время клиенту:
import time
def application(environ, start_response):
start_response('200 OK', [('content-type', 'text/plain')])
while True:
time.sleep(1.0)
yield time.ctime() + '\n'
if __name__ == '__main__':
from wsgiref.simple_server import make_server
print "Serving on http://localhost:4000..."
make_server('localhost', 4000, application).serve_forever()
Если перейти по URL-адресу в браузере, я вижу следующее:
Mon Oct 05 12:21:26 2009
Mon Oct 05 12:21:27 2009
Mon Oct 05 12:21:28 2009
Mon Oct 05 12:21:29 2009
Mon Oct 05 12:21:30 2009
(...a new line appears every second...)
Проблема с этим подходом состоит в том, что вы не можете держать очень много открытых соединений одновременно открытыми. Фактически, сервер wsgiref
является однопоточным, поэтому в любое время можно открыть только одно соединение. Если это проблема, вы должны использовать многопоточный (например, CherryPy) или неблокирующий сервер (например, Twisted, Tornado и т. Д.).