Files
ykxmz/_build/test_relay_memory.py
xmz7891 4c88ca901f 1.6.2:常规发布
- 版本号 1.6.2 -> 1.6.2
- 重建三端并打包
- 关键测试全过
2026-10-06 23:08:07 +08:00

126 lines
4.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
r"""验证「记住上次通的地址」是否让启动变快。
第一次启动:候选里没有记忆,要挨个探(默认地址现在是 192.168.2.156,
如果这台电脑能连上它,应该很快就通)
第二次启动:记忆里有它,直接排最前面,应该瞬间完成
重点看:**从进程启动到 UDP 8766 绑上花了多久** ——
这才是"手表多久能搜到电脑"。
"""
from __future__ import annotations
import json
import os
import shutil
import socket
import subprocess
import sys
import time
from pathlib import Path
ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote")
DISCOVERY = 8766
def clean() -> None:
subprocess.run(
["powershell", "-NoProfile", "-Command",
"Get-CimInstance Win32_Process -Filter \"Name='python.exe'\" | "
"Where-Object { $_.CommandLine -match 'run_agent' } | "
"ForEach-Object { Stop-Process -Id $_.ProcessId -Force "
"-ErrorAction SilentlyContinue }"],
capture_output=True, text=True, timeout=60)
time.sleep(2)
def probe(port: int, wait_discovery: bool = True) -> tuple[bool, float, str]:
"""起 agent,返回 (8766 是否可用, 花了多久, 日志尾部)。"""
t0 = time.time()
env = dict(os.environ)
env["PYTHONIOENCODING"] = "utf-8"
proc = subprocess.Popen(
[sys.executable, "run_agent.py", "--port", str(port),
"--new-code", "--add-device", "10"],
cwd=str(ROOT / "windows"), env=env,
stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
try:
deadline = time.time() + 40
got = False
while time.time() < deadline:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(1.5)
try:
s.sendto(json.dumps({"lanremote": "LANREMOTE_SELFCHECK",
"proto": 1}).encode(), ("127.0.0.1",
DISCOVERY))
data, _ = s.recvfrom(2048)
if b"LANREMOTE_ACK" in data:
got = True
break
except (socket.timeout, ConnectionResetError, OSError):
pass
finally:
s.close()
time.sleep(0.3)
elapsed = time.time() - t0
finally:
proc.terminate()
try:
proc.wait(timeout=10)
except subprocess.TimeoutExpired:
proc.kill()
time.sleep(1.5)
log = ROOT / "windows" / "data" / "silent.log"
tail = ""
if log.is_file():
tail = log.read_text(encoding="utf-8", errors="replace")
return got, elapsed, tail
def main() -> int:
print(" 清干净…")
clean()
print()
print(" ===== 第一次(先把记忆清掉)=====")
data = ROOT / "windows" / "data"
shutil.rmtree(data, ignore_errors=True)
got1, t1, log1 = probe(8861)
print(f" 8766 可用: {got1} 耗时 {t1:.1f} 秒")
rel_lines = [ln for ln in log1.splitlines() if "选用" in ln or "中转已启用" in ln]
for ln in rel_lines:
print(f" {ln.strip()}")
print()
print(" ===== 第二次(有记忆了)=====")
# 保留 data 里的 settings.json(记忆就存在这里)
got2, t2, log2 = probe(8862)
print(f" 8766 可用: {got2} 耗时 {t2:.1f} 秒")
rel_lines = [ln for ln in log2.splitlines() if "选用" in ln or "中转已启用" in ln]
for ln in rel_lines:
print(f" {ln.strip()}")
print()
print(" ===== 结果 =====")
print(f" 第一次 {t1:.1f} 秒 -> 第二次 {t2:.1f} 秒")
if t2 < t1:
print(f" ✓ 快了 {t1 - t2:.1f} 秒")
else:
print(" ~ 没有明显变快(可能第一个候选本来就通)")
# 看看记忆存了什么
settings = ROOT / "windows" / "data" / "settings.json"
if settings.is_file():
try:
obj = json.loads(settings.read_text(encoding="utf-8"))
print(f" 记忆的中转地址: {obj.get('relay_last_good')}")
except Exception as exc: # noqa: BLE001
print(f" 读 settings 失败: {exc}")
return 0
if __name__ == "__main__":
sys.exit(main())