如何使用 Cherrypy 流式传输数据
How to stream data with Cherrypy
以下代码应向浏览器发送 4 行文本,每秒 1 行。
相反,浏览器(我尝试使用 Chrome 和 IE)等待 4 秒并同时显示 4 行。该片段显示了两行设置 header。我尝试了两者,但都不起作用。
我做错了什么?
import cherrypy
import time
class Root:
@cherrypy.expose
def index(self):
cherrypy.response.headers['Content-Type'] = 'text/event-stream' # see
cherrypy.response.headers['Content-Type'] = 'text/plain' # see http://cherrypy.readthedocs.org/en/latest/advanced.html#how-streaming-output-works-with-cherrypy
def streamer():
for i in range(3):
time.sleep(1)
yield '{} {}\n'.format(time.asctime(), i+1)
print(i)
time.sleep(1)
yield '{} Done'.format(time.asctime())
return streamer()
index._cp_config = {'response.stream': True}
cherrypy.quickstart(Root())
你没有做错任何事。这取决于浏览器。对于这种调试,请使用 curl -v
或 curl --trace-ascii -
之类的东西。它显示每行到达时都如您预期的那样超时。应该也适用于 firefox。
以下代码应向浏览器发送 4 行文本,每秒 1 行。
相反,浏览器(我尝试使用 Chrome 和 IE)等待 4 秒并同时显示 4 行。该片段显示了两行设置 header。我尝试了两者,但都不起作用。
我做错了什么?
import cherrypy
import time
class Root:
@cherrypy.expose
def index(self):
cherrypy.response.headers['Content-Type'] = 'text/event-stream' # see
cherrypy.response.headers['Content-Type'] = 'text/plain' # see http://cherrypy.readthedocs.org/en/latest/advanced.html#how-streaming-output-works-with-cherrypy
def streamer():
for i in range(3):
time.sleep(1)
yield '{} {}\n'.format(time.asctime(), i+1)
print(i)
time.sleep(1)
yield '{} Done'.format(time.asctime())
return streamer()
index._cp_config = {'response.stream': True}
cherrypy.quickstart(Root())
你没有做错任何事。这取决于浏览器。对于这种调试,请使用 curl -v
或 curl --trace-ascii -
之类的东西。它显示每行到达时都如您预期的那样超时。应该也适用于 firefox。