要实现 Python 后端持续返回数据的 HTTP 功能,可以使用以下两种方法:

  1. 使用长轮询 (Long Polling) 技术:在客户端发送 HTTP 请求后,服务器不立即返回响应,而是保持连接打开,直到有新的数据可用或超时。当有新数据可用时,服务器立即返回响应并关闭连接,客户端收到响应后再次发送请求。这样就可以实现实时的数据推送。

示例代码如下:

from flask import Flask, request, jsonify
import time

app = Flask(__name__)

@app.route('/data', methods=['GET'])
def get_data():
    timeout = 30  # 超时时间,单位为秒
    start_time = time.time()
    
    while True:
        # 检查是否有新数据可用
        if new_data_available():
            data = get_new_data()
            return jsonify(data)
        
        # 检查超时
        if time.time() - start_time > timeout:
            return jsonify({'timeout': True})
        
        # 等待一段时间再次检查
        time.sleep(1)

def new_data_available():
    # 判断是否有新数据可用的逻辑
    # 返回True或False
    pass

def get_new_data():
    # 获取新数据的逻辑
    # 返回数据
    pass

if __name__ == '__main__':
    app.run()
  1. 使用 WebSocket 技术:WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,可以实现实时的双向数据传输。Python 中有多个库可以用于实现 WebSocket 功能,如 Tornado、Flask-Sockets 等。

示例代码如下(使用 Flask-Sockets 库):

from flask import Flask
from flask_sockets import Sockets

app = Flask(__name__)
sockets = Sockets(app)

@sockets.route('/data')
def echo_socket(ws):
    while True:
        # 接收客户端发送的消息
        message = ws.receive()
        
        # 处理消息并发送响应
        data = process_message(message)
        ws.send(data)

def process_message(message):
    # 处理消息的逻辑
    # 返回响应数据
    pass

if __name__ == '__main__':
    from gevent import pywsgi
    from geventwebsocket.handler import WebSocketHandler
    server = pywsgi.WSGIServer(('0.0.0.0', 5000), app, handler_class=WebSocketHandler)
    server.serve_forever()

以上是两种实现 Python 后端持续返回数据的 HTTP 方法,可以根据自己的需求选择适合的方法来实现。

Python 后端持续返回数据 HTTP 方法:长轮询和 WebSocket

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

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