p2p: split peer_timeout(120s) from direct_timeout(15s) so pairing code stays usable for its full TTL

This commit is contained in:
Liang Jiaqing committed 2026-08-09 00:19:44 +08:00
1 parent 8f9732ec0c
commit 4e92d5d88d
1 file changed
+9 -6
+9 -6
View File
@@ -250,11 +250,13 @@ class P2PSocket:
""" """
def __init__( def __init__(
self, signal_url, room, *, direct_timeout=15, retries=6, stun=True, self, signal_url, room, *, direct_timeout=15, peer_timeout=120, retries=6,
access_key=DEFAULT_ACCESS_KEY, stun=True, access_key=DEFAULT_ACCESS_KEY,
): ):
self.signal = Signal(signal_url, room, retries, access_key) self.signal = Signal(signal_url, room, retries, access_key)
self.direct_timeout = direct_timeout self.direct_timeout = direct_timeout
# 等对端进房的时长;须 >= 配对码有效期(120s),否则码没过期本端已离房
self.peer_timeout = peer_timeout
self.stun = stun self.stun = stun
self.mode = "connecting" self.mode = "connecting"
self.closed = False self.closed = False
@@ -270,12 +272,13 @@ class P2PSocket:
@classmethod @classmethod
async def connect( async def connect(
cls, signal_url: str, room: str, *, direct_timeout=15, retries=6, stun=True, cls, signal_url: str, room: str, *, direct_timeout=15, peer_timeout=120,
access_key=DEFAULT_ACCESS_KEY, retries=6, stun=True, access_key=DEFAULT_ACCESS_KEY,
): ):
"""连接同一 UUID 的另一个客户端,直连失败自动回退中继。""" """连接同一 UUID 的另一个客户端,直连失败自动回退中继。"""
self = cls( self = cls(
signal_url, room, direct_timeout=direct_timeout, retries=retries, stun=stun, signal_url, room, direct_timeout=direct_timeout,
peer_timeout=peer_timeout, retries=retries, stun=stun,
access_key=access_key, access_key=access_key,
) )
try: try:
@@ -289,7 +292,7 @@ class P2PSocket:
async def _connect(self): async def _connect(self):
await self.signal.start() await self.signal.start()
peer = await self.signal.expect("peer") peer = await self.signal.expect("peer", self.peer_timeout)
# 一次性 ECDH:即使走中继,服务器也拿不到会话密钥。 # 一次性 ECDH:即使走中继,服务器也拿不到会话密钥。
private, public = keypair() private, public = keypair()