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

本文介绍了Server-Sent Events(服务器发送事件)这一浏览器API,它允许保持服务器套接字打开以订阅更新流。协议简单,只需添加特定mimetype。可在Flask中使用,无需额外服务器。还给出了示例代码,客户端用JavaScript处理消息,部分浏览器已支持,旧浏览器有推荐的Polyfills。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看看

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支持旧的浏览器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值