<p>作为<a href="https://stackoverflow.com/a/12236019/141395">@peter-hoffmann's answer</a>的后续工作,我专门编写了一个Flask扩展来处理服务器发送的事件。它叫<a href="https://github.com/singingwolfboy/flask-sse" rel="noreferrer">Flask-SSE</a>,它叫<a href="https://pypi.python.org/pypi/Flask-SSE" rel="noreferrer">available on PyPI</a>。要安装它,请运行:</p>
<pre><code>$ pip install flask-sse
</code></pre>
<p>你可以这样使用它:</p>
<pre><code>from flask import Flask
from flask_sse import sse
app = Flask(__name__)
app.config["REDIS_URL"] = "redis://localhost"
app.register_blueprint(sse, url_prefix='/stream')
@app.route('/send')
def send_message():
sse.publish({"message": "Hello!"}, type='greeting')
return "Message sent!"
</code></pre>
<p>要从Javascript连接到事件流,它的工作方式如下:</p>
<pre><code>var source = new EventSource("{{ url_for('sse.stream') }}");
source.addEventListener('greeting', function(event) {
var data = JSON.parse(event.data);
// do what you want with this data
}, false);
</code></pre>
<p><a href="https://flask-sse.readthedocs.org" rel="noreferrer">Documentation is available on ReadTheDocs.</a>请注意,您需要一个正在运行的<a href="http://www.redis.io/" rel="noreferrer">Redis</a>服务器来处理发布/订阅</p>