從 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/

現在你將看到每一秒都會彈出一個新行。