83 lines
4.7 KiB
Markdown
83 lines
4.7 KiB
Markdown
# WebSocket 与网页端部署说明
|
||
|
||
## 问题说明
|
||
|
||
程序通过 **WebSocket** 与后端服务通信(设备状态、作业列表、系统配置等)。该服务在**桌面端**场景下是 Windows 本机运行的服务(默认 `ws://127.0.0.1:10010`)。
|
||
|
||
**网页端打包部署后能否连接,取决于“浏览器连的是谁”:**
|
||
|
||
- 网页运行在**用户浏览器**里,`new WebSocket("ws://127.0.0.1:10010")` 会连接的是**当前用户所在设备**的 127.0.0.1,而不是你放网页的那台服务器。
|
||
- 因此:
|
||
- **用户和 Windows 服务在同一台电脑**:例如在本机浏览器打开部署在本机的页面,用 `ws://127.0.0.1:10010` 可以连到本机服务,**可以连接**。
|
||
- **用户和 Windows 服务不在同一台电脑**:例如网页部署在服务器 A,用户在手机或另一台电脑 B 打开,此时 127.0.0.1 指向的是 B,连不到 A 上的服务,**无法连接**。
|
||
|
||
所以:**把程序打包放到网页端后,只有在“能访问到 WebSocket 服务”的情况下才可以连接**;默认写死 127.0.0.1 时,只适合“网页和服务在同一台机器”或“用户本机也跑了该服务”的场景。
|
||
|
||
---
|
||
|
||
## 已做改造:可配置 WebSocket 地址
|
||
|
||
为支持不同部署方式,已做两点改动:
|
||
|
||
### 1. 连接时优先读“用户配置”
|
||
|
||
- 连接 WebSocket 时**优先使用**本地存储中的 **`WS_SOCKET_API`**(localStorage)。
|
||
- 若未配置,再使用构建时注入的 **`process.env.VUE_APP_SOCKET_API`**(默认 `ws://127.0.0.1:10010`)。
|
||
|
||
因此同一套网页包可以:
|
||
|
||
- 部署在服务器上,由用户在登录页填写“实际要连的 WebSocket 地址”;
|
||
- 或由部署方在构建时通过环境变量写死一个公网/内网地址。
|
||
|
||
### 2. 登录页可填写并保存地址
|
||
|
||
- 在**登录页**增加 **“设置 WebSocket 服务地址”**(可展开/收起)。
|
||
- 用户可输入例如:
|
||
- `ws://127.0.0.1:10010`(本机服务)
|
||
- `ws://192.168.1.100:10010`(内网某台机器上的服务)
|
||
- `wss://your-domain.com/ws`(通过域名 + HTTPS 的 WSS 服务)
|
||
- 失焦或保存后写入 **localStorage**,下次进入或刷新后,连接会使用该地址。
|
||
|
||
这样**网页端打包部署后**,只要用户(或管理员)在登录页把地址改成“实际可访问的 WebSocket 服务地址”,就可以正常连接。
|
||
|
||
---
|
||
|
||
## 常见部署方式与是否可连接
|
||
|
||
| 部署方式 | 网页访问方式 | WebSocket 地址建议 | 能否连接 |
|
||
|----------|--------------|--------------------|----------|
|
||
| 网页和 Windows 服务都在**同一台电脑** | 本机浏览器打开(如 http://localhost:9081 或 file://) | `ws://127.0.0.1:10010`(默认即可) | 可以 |
|
||
| 网页在**服务器**,服务仍在**用户本机** | 用户在本机浏览器打开网站 | 在登录页设为 `ws://127.0.0.1:10010`(本机须已运行该服务) | 可以(仅限本机也跑服务时) |
|
||
| 网页在**服务器**,服务在**内网另一台机器** | 用户在内网任意电脑打开网站 | 在登录页设为 `ws://内网机器IP:10010`(或该机域名) | 可以(需网络可达、无策略拦截) |
|
||
| 网页在**公网**,服务在**公网服务器** | 任意设备打开网站 | 构建时设 `VUE_APP_SOCKET_API=wss://api.xxx.com/ws`,或在登录页填写该地址 | 可以(需后端提供 wss 与跨域策略) |
|
||
|
||
---
|
||
|
||
## 使用步骤(网页端部署后)
|
||
|
||
1. 打开登录页,点击 **“设置 WebSocket 服务地址”**。
|
||
2. 填入实际可访问的地址,例如:
|
||
- 本机:`ws://127.0.0.1:10010`
|
||
- 内网机器:`ws://192.168.1.100:10010`
|
||
- 公网:`wss://your-api.com/ws`
|
||
3. 失焦后会自动保存到当前浏览器;之后登录或刷新页面,会使用该地址连接。
|
||
4. 若更换环境(换电脑/换网络),在同一浏览器重新打开登录页,修改并保存新地址即可。
|
||
|
||
---
|
||
|
||
## 构建时写死地址(可选)
|
||
|
||
若部署环境固定(例如始终连同一台服务器),可在构建网页时注入默认地址,减少用户手动填写:
|
||
|
||
- 开发/测试:在 `config/dev.env.js` 中设置 `VUE_APP_SOCKET_API`。
|
||
- 生产:在 `config/prod.env.js` 或 CI 中设置 `VUE_APP_SOCKET_API`(如 `wss://api.xxx.com/ws`)。
|
||
|
||
未在登录页保存过地址时,会使用该默认值;保存过后以登录页配置为准。
|
||
|
||
---
|
||
|
||
## 总结
|
||
|
||
- **默认 `ws://127.0.0.1:10010` 只适合“浏览器所在机器 = 运行 WebSocket 服务的机器”的情况。**
|
||
- **网页端打包部署后**:通过**登录页可配置 WebSocket 地址**并写入 localStorage,连接时**优先使用该配置**,因此只要用户填写的地址在浏览器侧可达(本机/内网/公网),就可以正常连接。
|