Python 后端持续返回数据 HTTP 方法:长轮询和 WebSocket
要实现 Python 后端持续返回数据的 HTTP 功能,可以使用以下两种方法:
- 使用长轮询 (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()
- 使用 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 方法,可以根据自己的需求选择适合的方法来实现。
原文地址: https://www.cveoy.top/t/topic/ql7R 著作权归作者所有。请勿转载和采集!