-
Notifications
You must be signed in to change notification settings - Fork 171
标题:支持 SRV DNS 解析以允许在联机服务器地址中省略端口号 #638
Copy link
Copy link
Open
Description
描述:
当前在设置联机服务器地址时必须明确指定主机和端口(例如 example.com:12345)。建议在解析地址时加入 SRV(DNS Service)解析支持,允许用户只填写域名(例如 example.com),客户端通过 SRV 记录获取实际的目标主机和端口,从而简化配置并兼容使用 SRV 的托管/代理方案。
动机:
- 提升用户体验:用户只需填写域名,无需记住或填写端口号。
- 便于服务迁移与负载均衡:服务端可通过 SRV 指向不同主机和端口,而无需强制用户更改客户端设置。
- 降低配置错误:对使用自定义端口或反向代理的部署更友好。
建议实现(行为规范):
- 当用户输入的服务器地址未包含端口(无 ":" 及端口号)时,尝试进行 SRV 查询。
- 默认 SRV 前缀建议为 _phira._tcp.,并将该前缀作为可配置项以支持其它部署约定。
- 若 SRV 查询成功且返回记录,按 SRV 的 target:port 使用解析到的主机和端口进行连接;应遵循 SRV 的优先级与权重规则(至少实现优先级排序,针对相同优先级可按权重或随机选择)。
- 若 SRV 查询失败(无记录或查询超时/错误),回退到现有行为(使用默认端口或用户显式指定的端口)。显式指定端口应始终优先于 SRV 解析结果。
- 为避免阻塞与感知延迟,应设定合理的 SRV 查询超时时间与缓存策略(例如短期缓存、异步解析或在 UI 上提示“正在解析地址”)。
示例:
- 用户输入:example.com
- 客户端查询 _phira._tcp.example.com 的 SRV 记录,若返回 target=myserver.example.net port=26666,则连接 myserver.example.net:26666。
- 用户输入:example.com:25566
- 直接使用指定的端口,不进行 SRV 查询(显式端口优先)。
验收条件:
- 在无端口的地址输入场景下,可成功解析并连接到通过 SRV 指定的主机与端口(含优先级/权重处理或明确说明实现策略)。
- 当 SRV 不存在或解析失败时,行为回退并与当前版本一致(不影响已有配置)。
- 明确显式端口优先于 SRV。
- 提供单元/集成测试覆盖:成功 SRV 解析、无 SRV 回退、SRV 多记录的优先级/权重处理、超时与错误处理。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels