Python 和 web 前端通讯如何简单实现,除了使用 websocket 或者长连接还有哪些方法?

现在是想实现网页自动打印功能,利用后台传来的连接地址自动把对应连接以 web 形式打印出来。

lodop 有个调取 web 地址直接打印,我想 实时检测后台出来的网址直接 web 打印!
Python 和 web 前端通讯如何简单实现,除了使用 websocket 或者长连接还有哪些方法?

7 回复

简单实现…难道你说的不是 Ajax ?
WebSocket,个人觉得最重要的用途是可以实现服务器向浏览器推送消息。(个人这样用过:Flask-SocketIO + socket.io


用HTTP轮询或者Server-Sent Events(SSE)就行。

轮询最简单,前端定时发请求:

# 后端 Flask 示例
from flask import Flask, jsonify
import time

app = Flask(__name__)

@app.route('/api/data')
def get_data():
    # 这里返回你的数据
    return jsonify({
        'timestamp': time.time(),
        'data': 'your data here'
    })

if __name__ == '__main__':
    app.run(debug=True)

前端用setInterval定时拉取:

// 前端轮询
setInterval(async () => {
    const response = await fetch('/api/data');
    const data = await response.json();
    console.log('收到数据:', data);
}, 5000); // 每5秒请求一次

SSE更适合服务器主动推送的场景,后端这样写:

# Flask-SSE 示例
from flask import Flask, Response
import json
import time

app = Flask(__name__)

@app.route('/stream')
def stream():
    def generate():
        while True:
            # 模拟实时数据
            data = {
                'time': time.strftime('%H:%M:%S'),
                'value': '实时更新'
            }
            yield f"data: {json.dumps(data)}\n\n"
            time.sleep(2)  # 每2秒推送一次
    
    return Response(generate(), mimetype='text/event-stream')

前端用EventSource接收:

const eventSource = new EventSource('/stream');
eventSource.onmessage = (event) => {
    const data = JSON.parse(event.data);
    console.log('SSE推送:', data);
};

轮询适合更新不频繁的场景,SSE适合服务器需要主动推送但不需要双向通信的情况。用哪个看具体需求。

简单总结:根据数据更新频率选轮询或SSE。

server-side events

方便实用浏览器都支持用过的都说好。不需要任何异步框架。

提问不描述场景和真实需求都是耍流氓

谢谢提醒,有这个需求,主要还是想讨论下实现方式,现在在测试 ajax 实现长连接查询

Ajax 长连接是啥?轮询?

就是轮询,时间超时设置的大些

回到顶部