python – 服务器使用Flask/Redis发送事件:多个客户端如何查看流?

我有多个客户端尝试连接到服务器发送事件流在/ stream.这适用于单个客户端,但尝试连接任何其他客户端会导致新客户端无限期地阻塞等待数据.如果我发送更多数据,它只会发送给第一个客户端,而不会发送给其他客户端.

这是一个小片段,说明了我的问题:

import flask
import time

app = flask.Flask(__name__)

def event_stream():
    for i in xrange(9999):
        yield "data: %d\n\n" % i
        time.sleep(1)

@app.route("/stream", methods=[ "GET" ])
def stream():
    return flask.Response(
        event_stream(),
        mimetype="text/event-stream"
    )

然后我用gunicorn运行–worker-class = gevent -w 4 -t 99999 app:app.它适用于单个客户端,但在发出GET / stream时会阻止任何其他客户端.

阻止的原因是什么,我该如何解决?

我调试了一点,得到了一些奇怪的结果.如果我执行此过程,则会发生以下情况:

>启动客户端1(仅客户端1接收数据)
>启动客户端2(仅客户端1接收数据)
>启动客户端3(仅客户端1接收数据)
>启动客户端4(仅客户端1接收数据)
>重启客户端1(所有4个客户端突然开始同时接收数据)

最佳答案
事实证明,这与我正在测试的Chromium Web浏览器有关.由于某种原因,它会在第一个请求完成之前停止发出请求.使用curl或隐身浏览器会话允许多个会话同时运行.这意味着我的问题实际上并不存在,它只是出现这种方式,因为Chromium处理对同一资源的同时请求的方式.

我不确定Chromium为什么会这样,这看起来很奇怪.无论哪种方式,这不是一个真正的问题,只有我的浏览器感知到的问题.

转载注明原文:python – 服务器使用Flask/Redis发送事件:多个客户端如何查看流? - 代码日志