服务器推送是一种常见的实时通信方式,可以在服务器端主动向客户端推送数据,而不需要客户端主动发起请求。在 Flask 框架中,可以使用 WebSocket 或 Server-Sent Events (SSE) 来实现服务器推送。

  1. 使用 WebSocket 实现服务器推送

WebSocket 是一种全双工通信协议,可以在浏览器和服务器之间建立持久化的连接,实现实时通信。在 Flask 中,可以使用 Flask-SocketIO 库来实现 WebSocket。

首先,需要安装 Flask-SocketIO 库:

pip install flask-socketio

然后,在 Flask 应用中引入 SocketIO 库:

from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

在 Flask 应用中,可以使用@socketio.on() 装饰器来定义 WebSocket 事件处理函数。例如,以下代码定义了一个message 事件处理函数,当客户端发送message 事件时,服务器会向所有客户端广播消息:

@socketio.on('message')
def handle_message(message):
    emit('message', message, broadcast=True)

客户端可以使用 SocketIO 的 JavaScript 库来连接 WebSocket 并发送消息:

<script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/3.0.4/socket.io.js"></script>
<script>
  var socket = io();
  socket.on('connect', function() {
    console.log('Connected!');
  });
  socket.on('message', function(msg) {
    console.log('Received message:', msg);
  });
  socket.emit('message', 'Hello, world!');
</script>
  1. 使用 Server-Sent Events 实现服务器推送

Server-Sent Events (SSE) 是一种基于 HTTP 的单向通信协议,可以在服务器端向客户端推送数据。在 Flask 中,可以使用 Flask-SSE 库来实现 SSE。

首先,需要安装 Flask-SSE 库:

pip install flask-sse

然后,在 Flask 应用中引入 SSE 库:

from flask_sse import sse

app = Flask(__name__)
app.register_blueprint(sse, url_prefix='/stream')

在 Flask 应用中,可以使用@app.route() 装饰器来定义 SSE 事件处理函数。例如,以下代码定义了一个stream 路由,当客户端连接该路由时,服务器会向客户端推送消息:

import time

@app.route('/stream')
def stream():
    def event_stream():
        while True:
            yield 'data: {}

'.format(time.time())
            time.sleep(1)
    return Response(event_stream(), mimetype='text/event-stream')

客户端可以使用 JavaScript 的EventSource 对象来连接 SSE 并接收消息:

<script>
  var source = new EventSource('/stream');
  source.addEventListener('message', function(event) {
    console.log('Received message:', event.data);
  });
</script>
Flask 框架服务器推送实现:WebSocket 和 Server-Sent Events

原文地址: https://www.cveoy.top/t/topic/mC3Y 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录