【发布时间】:2013-06-20 00:27:11
【问题描述】:
我有多个客户端尝试连接到服务器发送的事件流/stream。这适用于单个客户端,但尝试连接更多客户端会导致新客户端无限期地阻塞等待数据。如果我发送更多数据,它只会发送给第一个客户端,而不会发送给其他客户端。
这是一个说明我的问题的小sn-p:
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个客户端突然同时开始接收数据)
【问题讨论】:
-
@farzad 这个例子也存在这个问题。
标签: python flask blocking server-sent-events