首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Flask框架中实现Server-Sent事件?

如何在Flask框架中实现Server-Sent事件?
EN

Stack Overflow用户
提问于 2020-04-23 16:47:22
回答 1查看 162关注 0票数 1

我正在尝试让一个进度条在Flask中工作。为此,我使用了Server Sent Events。当我在本地开发服务器上运行它时,一切都运行得很好,我可以在浏览器中看到在/progress窗口和进度栏中实时添加的数字没有问题。

但是如果我在Linux服务器(Linode)上运行它,浏览器窗口会挂起10秒,之后进度条会跳到100秒。我是初学者,不明白为什么它在本地机器上工作,为什么不在远程服务器上工作。请谁来解释一下。而且-这将是一个实际的解决方案。

烧瓶- app.py

代码语言:javascript
复制
@app.route('/progress')
def progress():
    def progress_func():
        x = 0
        while x < 100:
            time.sleep(1)
            x = x + 10
            yield 'data:' + str(x) + "\n\n"
    return Response(progress_func(), mimetype='text/event-stream')

js

代码语言:javascript
复制
var source = new EventSource("/progress");
source.onmessage = function(event) {
    $('.progress-bar').css('width', event.data+'%').attr('aria-valuenow', event.data);
    };

index.html

代码语言:javascript
复制
<div>
    <div class="progress" style="width: 100%; height: 6px;">
    <div class="progress-bar bg-success" role="progressbar" style="width: 6px" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
</div>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-23 16:53:00

根据我的经验,这个问题可能是由flask和前端之间的反向代理造成的。

如果使用nginx,则需要将proxy_buffering设置为off才能使用SSE

编辑:

在查看http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering时,我注意到可以通过在flask响应中将X-Accel-Buffering标头设置为no来实现相同的结果。此解决方案更好,因为它仅限于此特定响应。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61383004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档