File size: 1,103 Bytes
45b0567 df3f667 45b0567 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
from fastapi import FastAPI, WebSocket
import asyncio
import websockets
app = FastAPI()
# 目标 WebSocket 服务器的 URL
TARGET_WSS_URL = "wss://speech.platform.bing.com"
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
# 连接到目标 WebSocket 服务器
async with websockets.connect(TARGET_WSS_URL) as target_websocket:
# 创建两个任务来处理双向通信
client_to_server = asyncio.create_task(forward_messages(websocket, target_websocket))
server_to_client = asyncio.create_task(forward_messages(target_websocket, websocket))
# 等待两个任务完成
await asyncio.gather(client_to_server, server_to_client)
async def forward_messages(source: WebSocket, destination: WebSocket):
try:
while True:
message = await source.receive_text()
await destination.send_text(message)
except websockets.exceptions.ConnectionClosed:
pass
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000) |