可以举一下具体的代码例子吗
时间: 2024-04-16 21:28:07 浏览: 88
当然,请看以下具体的代码示例:
前端代码(微信小程序):
```javascript
// 建立 WebSocket 连接
const socket = wx.connectSocket({
url: 'ws://your-api-endpoint/ws',
});
// 监听 WebSocket 连接建立成功事件
socket.onOpen(() => {
console.log('WebSocket 连接已建立');
});
// 监听 WebSocket 接收到消息事件
socket.onMessage((res) => {
const message = res.data;
if (message === 'Business started.') {
console.log('收到业务开始信号,继续执行前端其他工作');
// 继续执行前端其他工作
// ...
} else if (message.startsWith('Business completed:')) {
const result = message.split(':')[1].trim();
console.log(`收到业务完成信号,业务执行结果为: ${result}`);
// 调用后端业务执行的结果
// ...
}
});
// 监听 WebSocket 连接关闭事件
socket.onClose(() => {
console.log('WebSocket 连接已关闭');
});
// 发送业务请求
wx.request({
url: 'http://your-api-endpoint/business',
method: 'GET',
success: function (res) {
console.log(res.data.message); // 输出 "Business started."
}
});
```
后端代码(使用 FastAPI):
```python
from fastapi import FastAPI, WebSocket
import asyncio
app = FastAPI()
# 存储 WebSocket 连接
websocket_connections = []
# 异步执行的业务逻辑
async def process_business():
await asyncio.sleep(5) # 模拟耗时的业务操作
return "Business completed."
# WebSocket 路由
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
websocket_connections.append(websocket)
try:
while True:
await websocket.receive_text()
except WebSocketDisconnect:
websocket_connections.remove(websocket)
# 业务请求的路由
@app.get("/business")
async def business_endpoint():
# 向前端发送业务开始信号
for connection in websocket_connections:
await connection.send_text("Business started.")
# 异步执行业务逻辑
result = await process_business()
# 向前端发送业务完成信号及结果
for connection in websocket_connections:
await connection.send_text(f"Business completed: {result}")
```
在这个示例中,前端通过 `wx.connectSocket` 建立了与 FastAPI 后端的 WebSocket 连接,并监听连接建立成功、接收到消息和连接关闭等事件。当前端发送业务请求后,后端会通过 WebSocket 向前端发送业务开始信号,并异步执行业务逻辑。在业务执行完成后,后端再次通过 WebSocket 向前端发送业务完成信号,并携带业务执行结果。前端收到消息后,可以根据消息内容进行相应的处理。
需要注意的是,这只是一个示例代码,实际应用中还需要根据具体需求进行适当的错误处理、连接管理等。同时,前端和后端需要建立 WebSocket 连接,并在适当的时机发送和接收消息。
阅读全文