Spaces:
BG5
/
Running

BG5 commited on
Commit
2b2c18d
·
verified ·
1 Parent(s): 9a4bcfd

Update fun.py

Browse files
Files changed (1) hide show
  1. fun.py +42 -18
fun.py CHANGED
@@ -41,31 +41,55 @@ async def websocket_proxy(websocket: WebSocket, path: str):
41
  logger.info(f"Forwarding WebSocket to: {target_url}")
42
 
43
  try:
44
- async with websockets.connect(
45
- target_url,
46
- # headers={"Host": "127.0.0.1"}, # 关键修改
47
- ping_interval=20,
48
- ping_timeout=30
49
- ) as target_ws:
50
- async def client_to_server():
 
 
 
 
 
 
51
  while True:
52
- data = await websocket.receive_bytes() # 支持二进制
53
- await target_ws.send(data)
 
 
 
 
 
 
 
 
 
54
 
55
- async def server_to_client():
 
56
  while True:
57
- data = await target_ws.recv()
58
- if isinstance(data, bytes):
59
- await websocket.send_bytes(data)
60
- else:
61
- await websocket.send_text(data)
 
 
 
 
 
 
 
 
 
 
62
 
63
- await asyncio.gather(client_to_server(), server_to_client())
64
  except WebSocketDisconnect:
65
  logger.info("Client disconnected")
66
  except Exception as e:
67
- logger.error(f"WebSocket error: {e}")
68
  await websocket.close()
69
-
70
  if __name__ == "__main__":
71
  uvicorn.run("fun:app", host="0.0.0.0", port=8000, reload=True)
 
41
  logger.info(f"Forwarding WebSocket to: {target_url}")
42
 
43
  try:
44
+ # 创建自定义连接
45
+ async def create_connection():
46
+ return await websockets.connect(
47
+ target_url,
48
+ # extra_headers={"Host": "127.0.0.1"},
49
+ ping_interval=20,
50
+ ping_timeout=30
51
+ )
52
+
53
+ target_ws = await create_connection()
54
+
55
+ async def forward_client_to_server():
56
+ try:
57
  while True:
58
+ # 明确处理文本和二进制消息
59
+ message = await websocket.receive()
60
+ if message["type"] == "websocket.receive.text":
61
+ await target_ws.send(message["text"])
62
+ logger.info(f"Sent text: {message['text'][:100]}")
63
+ elif message["type"] == "websocket.receive.bytes":
64
+ await target_ws.send(message["bytes"])
65
+ logger.info(f"Sent bytes: {message['bytes'][:100]}")
66
+ except Exception as e:
67
+ logger.error(f"Client->Server error: {e}")
68
+ raise
69
 
70
+ async def forward_server_to_client():
71
+ try:
72
  while True:
73
+ message = await target_ws.recv()
74
+ if isinstance(message, str):
75
+ await websocket.send_text(message)
76
+ logger.info(f"Received text: {message[:100]}")
77
+ elif isinstance(message, bytes):
78
+ await websocket.send_bytes(message)
79
+ logger.info(f"Received bytes: {message[:100]}")
80
+ except Exception as e:
81
+ logger.error(f"Server->Client error: {e}")
82
+ raise
83
+
84
+ await asyncio.gather(
85
+ forward_client_to_server(),
86
+ forward_server_to_client()
87
+ )
88
 
 
89
  except WebSocketDisconnect:
90
  logger.info("Client disconnected")
91
  except Exception as e:
92
+ logger.error(f"WebSocket error: {str(e)}")
93
  await websocket.close()
 
94
  if __name__ == "__main__":
95
  uvicorn.run("fun:app", host="0.0.0.0", port=8000, reload=True)