栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Flask框架中实现服务器推送?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Flask框架中实现服务器推送?

查看服务器发送的事件。服务器发送的事件是一种浏览器API,通过它可以打开服务器套接字,订阅更新流。有关更多信息,请阅读Alex
MacCaw(《剑圣》的作者)关于他为何杀死剑圣以及为什么在许多情况下更简单的“服务器发送事件”比Websockets更好的工作工具的文章。

该协议非常简单。只需将mimetype添加

text/event-stream
到您的响应中即可。浏览器将保持连接打开并监听更新。从服务器发送的事件是一行文本,其开头是一个
data:
换行符。

data: this is a simple message<blank line>

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

优点是您可以在Flask中使用SSE,而无需额外的服务器。github上有一个简单的聊天应用程序示例,该示例使用redis作为发布/订阅后端。

def event_stream():    pubsub = red.pubsub()    pubsub.subscribe('chat')    for message in pubsub.listen():        print message        yield 'data: %snn' % 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)

在客户端,您只需要一个Java处理程序函数,当从服务器中推送新消息时将调用该函数。

var source = new EventSource('/stream');source.onmessage = function (event) {     alert(event.data);};

最近的Firefox,Chrome和Safari浏览器支持服务器发送事件。Internet
Explorer尚不支持服务器发送的事件,但预期在版本10中将支持它们。建议使用两种Polyfills支持较旧的浏览器

  • EventSource.js
  • jquery.eventsource


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385975.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号