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)