先看现象。前端用后端签发的 ephemeral token 连实时语音接口,单次会话 90 秒,到第 60 秒开始收到 401 token expired,客户端不会自动续期,整段音频被截断。
把日志和配置对完,能解释这个现象的基本就这几处。临时 token 的 TTL 只有 60 秒。还有一种是长连接建立后没有续期机制。
另外,客户端按本地时区换算过期时间。
少数情况下是刷新请求被并发挤掉没有重试。
解析 token 里的 exp 字段
python -c "import base64,json,sys;t=sys.argv[1].split('.')[1];print(json.loads(base64.urlsafe_b64decode(t+'=='))) " $TOKEN
随后在过期前 10 秒主动刷新
curl -s -X POST https://api.example.com/v1/realtime/token -H "Authorization: Bearer $SESSION" -d '{"ttl":120}' | jq -r '.client_secret.value'
断线后用新 token 重连并保留上下文
python ws_reconnect.py --url wss://api.example.com/v1/realtime --token $NEW_TOKEN --resume 30
剩下的就是统计会话中断率确认修复
python metrics.py --metric realtime_disconnect_ratio --window 1h
同一份数据我导出了两份,一份留底,一份拿来试。
怎么算真的好了,看的是同一批现象。90 秒会话完整跑完,日志里没有 token expired,中断率从 12% 降到 1% 以下。
提醒一点。临时 token 是给前端用的短凭证,别指望它覆盖整段会话,续期逻辑要放在连接管理里而不是业务回调里。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
