gpt4 book ai didi

python - 服务器使用 Flask/Redis 发送事件 : how can more than one client view a stream?

转载 作者:太空狗 更新时间:2023-10-29 20:27:35 24 4
gpt4 key购买 nike

我有多个客户端尝试连接到 /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 网络浏览器有关。由于某种原因,在第一个请求完成之前,它会推迟发出请求。使用 curl 或隐身浏览器 session 允许多个 session 同时运行。这意味着我的问题实际上并不存在,只是因为 Chromium 处理对同一资源的同时请求的方式而出现这种情况。

我不太清楚为什么 Chromium 会这样,这看起来很奇怪。无论哪种方式,这都不是真正的问题,只是我的浏览器感知到的问题。

关于python - 服务器使用 Flask/Redis 发送事件 : how can more than one client view a stream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259534/

24 4 0