我有多个客户端试图连接到服务器发送的事件流/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个客户端突然同时开始接收数据)