從 Flask 啟用流式傳輸
Flask 具有該功能,允許你使用生成器從檢視中流式傳輸資料。
讓我們改變 app.py
檔案
- 加上
from flask import Response
- 新增
from datetime import datetime
- 加上
from time import sleep
- 建立一個新檢視:
@app.route("/time/")
def time():
def streamer():
while True:
yield "<p>{}</p>".format(datetime.now())
sleep(1)
return Response(streamer())
現在在 localhost/time/
開啟瀏覽器。該站點將永遠載入,因為 nginx 等待響應完成。在這種情況下,響應將永遠不會完成,因為它將永遠傳送當前日期和時間。
為了防止 nginx 等待,我們需要在配置中新增一個新行。
編輯/etc/nginx/sites-available/flaskconfig
server {
listen 80;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass unix:///tmp/flask.sock;
uwsgi_buffering off; # <-- this line is new
}
}
uwsgi_buffering off;
行告訴 nginx 不要等到響應完成。
重新啟動 nginx:sudo service nginx restart
並再次檢視 localhost/time/
。
現在你將看到每一秒都會彈出一個新行。