"""测量端到端真实延迟:发一条 auth_str,看应答多久到达(最长等 75 秒)。""" import hashlib import json import socket import time import pymysql HOST, PORT = "10.8.0.252", 3001 IMEI = "860000000000001" # 复位夹具,保证能重新申领 conn = pymysql.connect(host="10.8.0.252", user="root", password="Hbhyg731024@", database="pms_dev", connect_timeout=8, autocommit=True) cur = conn.cursor() cur.execute("UPDATE cabinets SET auth_str=NULL, auth_str_issued=0 WHERE imei=%s", (IMEI,)) cur.execute("DELETE FROM charge_records WHERE cabinet_id=1") cur.execute("DELETE FROM charge_orders WHERE cabinet_id=1") cur.execute("DELETE FROM device_logs WHERE cabinet_id=1") cur.execute("DELETE FROM batteries") cur.execute("UPDATE compartments SET status=0") conn.close() print(" 夹具已复位") s = socket.create_connection((HOST, PORT), timeout=5) s.settimeout(1.0) buf = b"" def send(obj): line = json.dumps(obj, separators=(",", ":")) + "\n" s.sendall(line.encode()) return time.time() def wait_reply(t0, timeout=75): """等到收到一行报文,返回 (耗时, 报文) 或 (None, None)。""" global buf while time.time() - t0 < timeout: try: chunk = s.recv(65536) except socket.timeout: continue if not chunk: return None, None buf += chunk if b"\n" in buf: line, buf = buf.split(b"\n", 1) return time.time() - t0, json.loads(line.decode()) return None, None print("\n=== ① auth_str 延迟实测 ===") t0 = send({"act": "auth_str", "msg_id": 1, "dev_id": IMEI}) dt, resp = wait_reply(t0) if resp: print(f" ✅ 应答耗时 {dt:.1f}s : {json.dumps(resp, ensure_ascii=False)}") auth_str = resp.get("auth_str") else: print(f" ❌ {dt if dt else '>75'}s 内无应答") auth_str = None if auth_str: print("\n=== ② login 延迟实测 ===") ts = int(time.time()) sign = hashlib.sha256(f"{IMEI}{auth_str}{ts}".encode()).hexdigest()[56:64] t0 = send({"act": "login", "msg_id": 2, "dev_id": IMEI, "sign": sign, "timestamp": ts}) dt, resp = wait_reply(t0) print(f" {'✅' if resp else '❌'} 应答耗时 {dt:.1f}s : {json.dumps(resp, ensure_ascii=False) if resp else '无'}") print("\n=== ③ status_post 延迟实测 ===") t0 = send({"act": "status_post", "msg_id": 3, "rssi": 85, "cabinet": {"status1": "00", "status2": "00", "temp": 29800, "meter": 125500}, "boards": [{"board": 1, "channels": ["008200000000000000", "008200000000000000"]}, {"board": 2, "channels": ["008200000000000000", "008200000000000000"]}]}) dt, resp = wait_reply(t0) print(f" {'✅' if resp else '❌'} 应答耗时 {dt:.1f}s : {json.dumps(resp, ensure_ascii=False) if resp else '无'}") s.close()