doge 1 dzień temu
rodzic
commit
7b896d1a6a
1 zmienionych plików z 41 dodań i 0 usunięć
  1. 41 0
      docs/后端/WebSocket数字-独立服务自检.md

+ 41 - 0
docs/后端/WebSocket数字-独立服务自检.md

@@ -0,0 +1,41 @@
+# WebSocket 数字:独立服务自检
+
+五秒数字更新就在 `php think websocket:start` 的常驻进程中,没有另外的五秒计划任务。更新服务文件后,重启实际监听 9501 的这一项进程即可;启动目录要与发布目录一致。
+
+原消息推送、端口、TLS 和 Nginx 配置保留。本次增加运行版本标记和只读自检,不切换现有服务入口。
+
+数字推送及启动版本标记涉及的服务文件:
+
+- `app/common/service/FloatingNumberService.php`
+- `app/common/service/WebSocketServer.php`
+- `app/api/command/StartWebSocket.php`
+- `app/common/service/FloatingNumberWebSocketProbe.php`
+- `app/api/command/DiagnoseWebSocket.php`
+- `config/console.php`
+- 框架入口同时发布时包含 `app/common/service/FloatingNumberFrameworkListener.php`
+
+启动日志会打印服务源文件路径和 `floating-number-v3`。连接后的 `welcome` 也带 `service` 和 `build`,可以比较当前磁盘上的代码与实际监听进程。
+
+服务重启后,在同一项目目录执行:
+
+```bash
+php think websocket:diagnose --url='wss://你的实际WS域名:9501' --wait=8
+```
+
+`--url` 必须换成原来正常推送使用的完整地址,保留实际的协议、域名、端口和路径;不能仅根据9501端口认定服务是明文。当前独立服务源码启用了TLS,因此对应直连协议为 `wss://`,并应使用与证书匹配的域名。自检不会关闭证书验证,也不再提供猜测的默认地址。
+
+已修正TLS非阻塞读取中的空读误判:短暂空读会继续等待,只有超时或对端确实关闭才提示握手失败,同时显示已收到的字节数。本次探针修正只需更新 `app/common/service/FloatingNumberWebSocketProbe.php` 和 `app/api/command/DiagnoseWebSocket.php`,无需重启原来正常的WebSocket服务。
+
+结果字段:
+
+| 字段/结果 | 含义 |
+| --- | --- |
+| 连接/握手失败 | 尚未进入消息处理,先核对地址及连接协议 |
+| `service`、`build` | 实际收到的欢迎包标记;独立服务为 `websocket_start`,新版为 `floating-number-v3` |
+| `value` 为 `null` | 已连接,但没有收到数字消息 |
+| `request_reply=true` | 此次 `get_floating_number` 收到带匹配请求标记的确认回包 |
+| `periodic_update=true` | 等待期间另收到了数值发生变化的自动推送 |
+
+只有主动取数和自动更新都正常时自检退出码为0。旧服务未回新版请求标记时会明确提示,自动广播不会被误判为主动回包。探针只发送公开取数请求及必要的协议心跳,不发送游戏、钱包或用户操作。
+
+`get_floating_number` 是立即回复,与五秒定时任务独立;如果主动回包正常而自动更新不正常,再查看启动日志中的 `floating_number_failed`。