python服务器消息推送_python – 如何在Flask框架中实现服务器推送?

看看

Server-Sent Events.服务器发送事件是一个

浏览器API,允许您保持打开服务器的套接字,订阅

更新流。更多信息阅读Alex MacCaw(作者

Juggernaut)post在

why he kills juggernaut和为什么更简单

服务器发送事件在manny情况下是更好的工具比工作

Websockets。

协议真的很容易。只需添加mimetype文本/事件流到您的

响应。浏览器将保持连接打开并监听更新。一个事件

从服务器发送的一行文本以data:开头和一个以下换行符。

data: this is a simple message

如果要交换结构化数据,只需将数据转储为json并通过线发送json。

一个优点是,您可以在Flask中使用SSE,而不需要额外的

服务器。在github上有一个简单的chat application example

使用redis作为pub / sub后端。

def event_stream():

pubsub = red.pubsub()

pubsub.subscribe('chat')

for message in pubsub.listen():

print message

yield 'data: %s\n\n' % message['data']

@app.route('/post', methods=['POST'])

def post():

message = flask.request.form['message']

user = flask.session.get('user', 'anonymous')

now = datetime.datetime.now().replace(microsecond=0).time()

red.publish('chat', u'[%s] %s: %s' % (now.isoformat(), user, message))

@app.route('/stream')

def stream():

return flask.Response(event_stream(),

mimetype="text/event-stream")

你不需要使用gunicron来运行

示例应用程序。只要确保在运行应用程序时使用线程,因为

否则SSE连接将阻止您的开发服务器:

if __name__ == '__main__':

app.debug = True

app.run(threaded=True)

在客户端,你只需要一个Javascript处理函数,当一个新的时将被调用

消息从服务器推送。

var source = new EventSource('/stream');

source.onmessage = function (event) {

alert(event.data);

};

服务器发送事件是最近的Firefox,Chrome和Safari浏览器的supported。

Internet Explorer尚不支持服务器发送事件,但预计会支持它们

版本10.有两个推荐的Polyfills支持旧的浏览器

你可能感兴趣的:(python服务器消息推送)