我尝试将Flask网络应用中的JSON流发送到浏览器。 这是服务器端生成器的简化版本:
@app.route('/stream')
def stream():
def generate():
for i in range(1000):
time.sleep(0.05)
yield '{"key": %d}' % i
return Response(generate(), mimetype="application/json")
在浏览器中,我使用oboe.js:
来使用流stream = oboe('/stream')
.on('node', {
'key': function (scheme) {
console.log(scheme);
}
})
在本地,在开发服务器中这非常好用,数据作为连续流传输。但是当将其作为Azure Web服务运行时,GET请求需要很长时间,然后立即获取所有数据。在生成器完成之前,服务器似乎不会传输任何数据。
这种行为是否可归因于在Azure上使用的Flask背后的WSGI / Web服务器?除了更改平台之外还有其他解决方法吗?哪种WSGI服务器支持这种流式传输?
感谢您的帮助,
鲍里斯
答案 0 :(得分:0)
根据我的经验,它似乎是由IIS作为Azure WebApp上Flask的WSGI / Web服务器引起的,但我不确定。
对于哪种WSGI服务器支持这种流式传输,您可以参考线程HTTP Streaming with Apache mod_wsgi。
我建议您尝试在Azure VM上测试其他WSGI + Flask
组合服务器,例如Ubuntu VM服务器。
希望它有所帮助。最诚挚的问候。