Spaces:
Sleeping
Sleeping
fix: 首包转发到wstunnel后端, shutdown延迟调用, macOS兼容
Browse files- .gitattributes +0 -35
- .gitignore +2 -0
- server.py +8 -8
.gitattributes
DELETED
|
@@ -1,35 +0,0 @@
|
|
| 1 |
-
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
-
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
-
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
-
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
-
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
-
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
-
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
-
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
-
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
-
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
-
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
-
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
-
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
-
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
-
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
-
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
-
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
-
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
-
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
-
*.xz filter=lfs diff=lfs merge=lfs -text
|
| 33 |
-
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
-
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
-
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.gitignore
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__pycache__/
|
| 2 |
+
*.pyc
|
server.py
CHANGED
|
@@ -1,9 +1,7 @@
|
|
| 1 |
import asyncio
|
| 2 |
import os
|
| 3 |
-
import subprocess
|
| 4 |
import signal
|
| 5 |
import sys
|
| 6 |
-
import functools
|
| 7 |
|
| 8 |
WSTUNNEL_PORT = 7861
|
| 9 |
PROXY_PORT = 7860
|
|
@@ -16,7 +14,7 @@ async def health_check(reader, writer):
|
|
| 16 |
writer.close()
|
| 17 |
|
| 18 |
|
| 19 |
-
async def tcp_proxy(reader, writer):
|
| 20 |
try:
|
| 21 |
backend_reader, backend_writer = await asyncio.wait_for(
|
| 22 |
asyncio.open_connection("127.0.0.1", WSTUNNEL_PORT), timeout=5
|
|
@@ -27,6 +25,10 @@ async def tcp_proxy(reader, writer):
|
|
| 27 |
writer.close()
|
| 28 |
return
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
async def forward(src, dst):
|
| 31 |
try:
|
| 32 |
while True:
|
|
@@ -62,9 +64,7 @@ async def handle_client(reader, writer):
|
|
| 62 |
if is_health_check:
|
| 63 |
await health_check(reader, writer)
|
| 64 |
else:
|
| 65 |
-
|
| 66 |
-
await writer.drain()
|
| 67 |
-
await tcp_proxy(reader, writer)
|
| 68 |
except (ConnectionResetError, BrokenPipeError, OSError, asyncio.TimeoutError):
|
| 69 |
pass
|
| 70 |
finally:
|
|
@@ -105,9 +105,9 @@ async def main():
|
|
| 105 |
loop = asyncio.get_event_loop()
|
| 106 |
for sig in (signal.SIGTERM, signal.SIGINT):
|
| 107 |
try:
|
| 108 |
-
loop.add_signal_handler(sig,
|
| 109 |
except NotImplementedError:
|
| 110 |
-
|
| 111 |
|
| 112 |
async with server:
|
| 113 |
print(f"proxy server ready on port {PROXY_PORT}", flush=True)
|
|
|
|
| 1 |
import asyncio
|
| 2 |
import os
|
|
|
|
| 3 |
import signal
|
| 4 |
import sys
|
|
|
|
| 5 |
|
| 6 |
WSTUNNEL_PORT = 7861
|
| 7 |
PROXY_PORT = 7860
|
|
|
|
| 14 |
writer.close()
|
| 15 |
|
| 16 |
|
| 17 |
+
async def tcp_proxy(reader, writer, initial_data=None):
|
| 18 |
try:
|
| 19 |
backend_reader, backend_writer = await asyncio.wait_for(
|
| 20 |
asyncio.open_connection("127.0.0.1", WSTUNNEL_PORT), timeout=5
|
|
|
|
| 25 |
writer.close()
|
| 26 |
return
|
| 27 |
|
| 28 |
+
if initial_data:
|
| 29 |
+
backend_writer.write(initial_data)
|
| 30 |
+
await backend_writer.drain()
|
| 31 |
+
|
| 32 |
async def forward(src, dst):
|
| 33 |
try:
|
| 34 |
while True:
|
|
|
|
| 64 |
if is_health_check:
|
| 65 |
await health_check(reader, writer)
|
| 66 |
else:
|
| 67 |
+
await tcp_proxy(reader, writer, initial_data=data)
|
|
|
|
|
|
|
| 68 |
except (ConnectionResetError, BrokenPipeError, OSError, asyncio.TimeoutError):
|
| 69 |
pass
|
| 70 |
finally:
|
|
|
|
| 105 |
loop = asyncio.get_event_loop()
|
| 106 |
for sig in (signal.SIGTERM, signal.SIGINT):
|
| 107 |
try:
|
| 108 |
+
loop.add_signal_handler(sig, lambda: asyncio.create_task(shutdown()))
|
| 109 |
except NotImplementedError:
|
| 110 |
+
signal.signal(sig, lambda n, f: asyncio.run_coroutine_threadsafe(shutdown(), loop))
|
| 111 |
|
| 112 |
async with server:
|
| 113 |
print(f"proxy server ready on port {PROXY_PORT}", flush=True)
|