实现 Python 服务在执行完毕后主动向前端发送信息,以便前端(例如 Vue.js 应用)可以更新显示

可以通过多种方法实现 Python 服务在执行完毕后主动向前端发送信息,以便前端(例如 Vue.js 应用)可以更新显示。下面介绍几种常见的方法:

1. 使用 WebSockets

WebSockets 是一种在客户端和服务器之间建立持久连接的通信协议,适用于实时更新。可以使用 websockets 库在 Python 中实现 WebSocket 服务器。

Python 服务器代码示例:
python 复制代码
import asyncio
import websockets

async def handler(websocket, path):
    while True:
        # 等待客户端请求
        message = await websocket.recv()
        print(f"Received message: {message}")

        # 执行某些操作...
        
        # 发送更新通知给前端
        await websocket.send("Update completed")

start_server = websockets.serve(handler, "localhost", 6789)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Vue.js 前端代码示例:
javascript 复制代码
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Waiting for update...'
    };
  },
  created() {
    this.connectWebSocket();
  },
  methods: {
    connectWebSocket() {
      const socket = new WebSocket('ws://localhost:6789');
      socket.onmessage = (event) => {
        this.message = event.data;
      };
    }
  }
};
</script>

2. 使用 HTTP Polling

HTTP Polling 是一种客户端定期向服务器发送请求以检查是否有新数据的技术。虽然不如 WebSockets 实时,但实现简单且兼容性好。

Python 服务器代码示例:
python 复制代码
from flask import Flask, jsonify
import time

app = Flask(__name__)

@app.route('/check_update', methods=['GET'])
def check_update():
    # 模拟一些处理
    time.sleep(5)
    return jsonify({'status': 'Update completed'})

if __name__ == '__main__':
    app.run(debug=True)
Vue.js 前端代码示例:
javascript 复制代码
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Waiting for update...'
    };
  },
  created() {
    this.checkForUpdate();
  },
  methods: {
    checkForUpdate() {
      setInterval(() => {
        fetch('/check_update')
          .then(response => response.json())
          .then(data => {
            this.message = data.status;
          });
      }, 5000); // 每5秒检查一次
    }
  }
};
</script>

3. 使用 Server-Sent Events (SSE)

SSE 允许服务器主动推送消息到客户端。它基于 HTTP 协议,适用于需要频繁更新但不需要双向通信的场景。

Python 服务器代码示例:
python 复制代码
from flask import Flask, Response
import time

app = Flask(__name__)

@app.route('/stream')
def stream():
    def event_stream():
        while True:
            time.sleep(1)
            yield f'data: Update completed\n\n'
    return Response(event_stream(), content_type='text/event-stream')

if __name__ == '__main__':
    app.run(debug=True)
Vue.js 前端代码示例:
javascript 复制代码
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: 'Waiting for update...'
    };
  },
  created() {
    this.connectSSE();
  },
  methods: {
    connectSSE() {
      const eventSource = new EventSource('/stream');
      eventSource.onmessage = (event) => {
        this.message = event.data;
      };
    }
  }
};
</script>

选择哪种方法取决于您的具体需求和应用场景。如果需要双向通信和实时性,WebSockets 是最佳选择。如果只需要服务器向客户端推送更新且无需双向通信,SSE 是一个不错的选择。如果实现简单是优先考虑的,HTTP Polling 也可以满足需求。

相关推荐
0思必得0几秒前
[Web自动化] Selenium模拟用户的常见操作
前端·python·selenium·自动化
凡客丶5 分钟前
Windows版Miniconda打包环境迁移到内网离线环境【详解】
windows·python
AI大佬的小弟9 分钟前
【详细步骤】大模型基础知识(4)---ollama模型调用-多轮对话体验
python·ollama·大模型基础·ai 聊天机器人·简单的大模型部署·实现ollama模型调用·零基础上手 ollama体验
Apifox.13 分钟前
测试用例越堆越多?用 Apifox 测试套件让自动化回归更易维护
运维·前端·后端·测试工具·单元测试·自动化·测试用例
AndrewHZ17 分钟前
【Python与生活】怎么用python画出好看的分形图?
开发语言·python·生活·可视化·递归·分形
玉梅小洋28 分钟前
Chrome设置链接自动跳转新标签页而不是覆盖
前端·chrome
EndingCoder34 分钟前
反射和元数据:高级装饰器用法
linux·运维·前端·ubuntu·typescript
Marshmallowc38 分钟前
React性能优化:useState初始值为什么要用箭头函数?深度解析Lazy Initialization与Fiber机制
前端·react.js·性能优化·前端框架·react hooks
Coder_Boy_41 分钟前
基于SpringAI的在线考试系统-试卷管理模块完整优化方案
前端·人工智能·spring boot·架构·领域驱动