Flask服务器使用uwsgi发送事件(SSE)

时间:2017-04-30 19:21:21

标签: flask redis uwsgi gunicorn server-sent-events

来自https://pypi.python.org/pypi/Flask-SSE

的基本示例

app.py

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!"

使用:

var source = new EventSource("{{ url_for('sse.stream') }}");
source.addEventListener('greeting', function(event) {
    var data = JSON.parse(event.data);
    console.log(data);
}, false);
source.addEventListener('error', function(event) {
    console.log("Failed to connect to event stream.");
}, false);

如果我使用gunicorn

gunicorn app:app --worker-class gevent --bind 0.0.0.0:8000

邮件已在我的模板中成功收到,但如果我使用uwsgi

uwsgi --gevent 100 --socket 0.0.0.0:8000 --protocol=http -w wsgi

使用 app.ini

[uwsgi]
module = wsgi

master = true
processes = 5

socket = app.sock
chmod-socket = 660
vacuum = true

die-on-term = true

模板JavaScript不会收到任何消息,也不会收到任何错误。

我在Ubuntu 16.10上使用redis服务器

1 个答案:

答案 0 :(得分:0)

我认为您需要建立另一个端点来流式传输您发布的内容: 看看这个仓库https://github.com/jakubroztocil/chat