fix: SOCKS5 隧道修复 - 子线程事件循环兼容性

1. 去掉 asyncio.wait_for 包装 open_connection,改用直接调用
2. ConnectionHandler 增加 flask_app 参数,数据库操作使用 app context
3. InstanceManager 传递 flask_app 到 Socks5Server
4. 修复 _reply 中 writer.write 不需要 await 的问题

验证:
- 直连测试: HTTP/1.1 200 OK (ifconfig.me)
- 端口监听: 10800 正常工作
This commit is contained in:
Your Name
2026-07-16 19:00:53 +08:00
parent 4fbb63e0b9
commit 5ab5366534
3 changed files with 41 additions and 36 deletions
+7 -4
View File
@@ -31,9 +31,10 @@ class InstanceConfig:
class Socks5Server:
"""单个 SOCKS5 服务器的 asyncio 事件循环。"""
def __init__(self, config: InstanceConfig, user_service):
def __init__(self, config: InstanceConfig, user_service, flask_app=None):
self.config = config
self.user_service = user_service
self.flask_app = flask_app
self.server = None
self.loop = None
self.thread = None
@@ -94,6 +95,7 @@ class Socks5Server:
self._active_connections += 1
handler = ConnectionHandler(
reader, writer, self.config, self.user_service,
flask_app=self.flask_app,
on_close_cb=self._on_connection_close
)
await handler.handle()
@@ -113,8 +115,9 @@ import time # noqa: E402
class InstanceManager:
"""管理所有 SOCKS5 实例。"""
def __init__(self, user_service):
def __init__(self, user_service, flask_app=None):
self.user_service = user_service
self.flask_app = flask_app
self._instances = {} # name -> Socks5Server
self._config_cache = {} # name -> InstanceConfig
self._lock = threading.Lock()
@@ -151,7 +154,7 @@ class InstanceManager:
# 启动缺失的实例
for name in current_names - running_names:
cfg = self._config_cache[name]
srv = Socks5Server(cfg, self.user_service)
srv = Socks5Server(cfg, self.user_service, self.flask_app)
srv.start()
with self._lock:
self._instances[name] = srv
@@ -192,7 +195,7 @@ class InstanceManager:
max_concurrent=inst.max_concurrent,
)
self._config_cache[inst.name] = cfg
srv = Socks5Server(cfg, self.user_service)
srv = Socks5Server(cfg, self.user_service, self.flask_app)
srv.start()
with self._lock:
self._instances[inst.name] = srv