Files
ft/CodexOutput/upserver/首批实施方案.md

56 lines
5.2 KiB
Markdown
Raw 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.
# 首批实施方案:s101 API 地址与 SignalR 直连
日期:2026-09-15。状态:技术自审完成,提交用户评审;尚未修改生产代码。
## 本次批准的实施子集
用户随后明确要求按截图先修改 SignalR 连接配置。裁决:本子集评审通过并获得实施授权。
开发边界仅 RTService.cs:引入 Microsoft.AspNetCore.Http.Connections,在现有 WithUrl 委托中保留 Cookie,增加 SkipNegotiation=true、Transports=WebSockets。保留 URL 来源、连接触发、事件与自动重连;不执行本文其他 API/本地配置变更。
评审依据:使用官方 .NET SignalR 客户端;两选项必须配套,现有依赖包含 Http.Connections.Client/Common。风险:此实现不再回退其他传输;真实连通性仍需有效地址与认证。验证为差异检查及本地依赖 API 检查,未执行真实登录前不宣称连接成功。
## 目标与裁决
正式 API 基址为 http://s101.local:18080/,按现有客户端路由构造 http://s101.local:18080/gamehub。后者为待联调验证的现有路由,不是已确认的服务器契约。
采用共用默认常量、保留现有配置优先级、SignalR WebSockets-only 直连方案。无需新建网络框架。放弃仅替换 CustomServerMgr 字面量的方案:本地/远端配置可能覆盖它,且 RTService 的默认值原本为空,会造成两条链路不一致。
## 文件改动
1. Client/Assets/Scripts/AOTScripts/GConstant.cs:新增 V_S101_API_URL 常量,值为 http://s101.local:18080/。
2. Client/Assets/Editor/DebugConfig.cs:s101EventAPIUrl 引用共用常量;Svr101Validation 同时核对 EventApiURL,防止旧配置被勾选为当前 s101 配置。
3. Client/Assets/Scripts/Core/CustomServerMgr.cs:替换旧 IP 默认值为共用常量;规范化末尾斜杠,拒绝无效/空地址,使相对请求路径解析明确。
4. Client/Assets/Scripts/Services/RTService.cs:同样使用共用常量作为缺省值,校验/规范化基址,使用 Uri 组合 gamehub;新增 Microsoft.AspNetCore.Http.Connections 引用。在 WithUrl 配置中保留 Cookies,并设置 Transports=HttpTransportType.WebSockets、SkipNegotiation=true。保留已有连接触发事件、消息注册和自动重连。
采用现有客户端整体 WebSockets-only 策略,不添加按主机猜测模式的分支;其他仍使用该实现的环境也必须支持 WebSocket 直连。若需要同时保留 Azure/长轮询环境,应另行评审显式环境开关。
## 配置生效
现有编辑器加载顺序为远端配置后合并本地 debugconfig.json,代码默认值只在缺少键时使用。
本机联调时定位实际 persistentDataPath,仅将现有 debugconfig.json 的 EventApiURL 更新为正式基址,保留其他字段。若无此文件,创建仅包含该键的覆盖配置。不要为改 API 直接运行会重写静态资源、Func 和 RTM 字段的整套 Svr101 菜单。文件位于工作区外时通过工具正常权限流程写入。
发布包若读取远端配置,仍需该配置的 EventApiURL 指向正式地址;修改源代码缺省值不能证明已覆盖远端配置。此次不发布远端配置。
## 连接行为
业务登录成功事件 → 取得 CookieContainer → 使用上述 Hub URL → 直接 WebSocket Upgrade → SignalR 协议握手 → 收发业务消息。
跳过 HTTP negotiate;保留 SignalR 协议握手。连接失败直接暴露真实错误,不回退到 negotiate/长轮询,不记录 Cookie 内容。Cookie 是否满足新服务端认证,待登录接口确认。
## 验证与完成口径
1. 静态检查:四个源文件改动聚焦;API/Hub 共用基址;URL 对有/无末尾斜杠均生成正确地址。
2. Unity 编译:使用现有 2022.3.62f2c1 确认 HttpTransportType/SkipNegotiation 可用。
3. 运行配置:确认最终 API 基址为 http://s101.local:18080/,Hub 为其 gamehub 路径;服务时间接口返回成功。
4. 登录可用后,通过客户端网络诊断或服务端访问日志验证 WebSocket 升级、SignalR 握手和业务消息成功,且没有 /gamehub/negotiate 请求;断开后重连仍走 WebSocket。
5. 登录链路尚不可用时,只交付配置和编译结果,实时服务完整联调保持待验收,不以 GET / 的 200 冒充 Hub 连接成功。
## 开发边界与风险
- 本批仅上述源文件、必要验证记录及本机 EventApiURL 覆盖项。
- 不修改登录协议、KV、PlayFab、业务事件名、静态资源/Func/RTM 地址、服务器部署。
- WebSockets-only 要求服务端与反向代理支持 Upgrade;s101.local 必须能在运行客户端的设备上解析。
- 未确认 gamehub 路由或认证协议时不猜测替换;联调结果决定后续契约工作。
## 评审记录
- 地址来源:用户明确确认 s101.local:18080,通过根路径和服务器时间接口只读探测。
- 配置覆盖:已审查 InternalEditorBoost.LoadConfig;首批包含本地覆盖生效验证。
- 数据影响:不改变存档或身份模型。
- 失败与兼容性:明确只允许 WebSocket,不隐藏失败;旧环境兼容要求已列明。
- 技术自审裁决:方案范围完整,可供首批开发;用户评审裁决待确认。
参考:https://learn.microsoft.com/en-us/aspnet/core/signalr/configuration?view=aspnetcore-10.0