56 lines
5.2 KiB
Markdown
56 lines
5.2 KiB
Markdown
# 首批实施方案: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
|