完整的WebSocket 接口文档
2026/7/11 13:27:34 网站建设 项目流程

WebSocket和HTTP对比

对比维度🔗WebSocket📬HTTP
通信方向全双工,客户端和服务器可以同时、互相发送消息。半双工/单工,必须由客户端发起请求,服务器才能响应。
连接状态持久连接,一旦建立,除非主动关闭,否则一直保持在线。短连接,每次请求/响应后,连接通常就会断开(Keep-Alive 也只是复用,不是长连)。
服务端能力可以主动向客户端推送数据(如实时通知)。不能主动推送,只能被动响应客户端的请求。
实时性极高,消息到达即发送,延迟低较低,需要客户端不断轮询(频繁发请求)才能获取新数据。
适用场景实时聊天、在线游戏、股票行情、协同编辑等。传统的网页浏览、API 调用、文件下载等

提示:这里主要是WebSocket的一个实例,具体根据实际需求

1. 概述

平台目前提供1 个 WebSocket 端点:设备列表实时推送。

项目说明
业务需求大屏需要实时获取 列表设备的最新健康度状态(1分钟1次)这个时间频率可自行设置
数据同源与 HTTPPOST /device/list共用TwinbornService.listDevices()
推送方式连接后立即推送 1 次,之后每60 秒自动推送
协议纯文本 JSON(TextMessage

注意:一般来说使用WebSocket实时推送,都会写一个HTTP接口,防止实时接口获取不到,可手动获取HTTP

HTTP 示例


2. 连接地址 (和HTTP区别是 前缀连接不同,接口前方加/ws

默认端口:45152 (我自己项目中的端口定义,实际根据自己项目来)

ws://{host}:45152/ws/device/list

生产环境建议使用 WSS:

wss://{host}:{port}/ws/device/list //wss 数据传输需要加密,考虑到数据安全

3.跨域:

WebSocketConfig中配置了setAllowedOrigins("*"),允许任意来源连接。
这里可以根据AI生成WebSocketConfig的连接工具类,类似HTTP的连接工具类


4. 筛选参数

4.1 连接时通过 URL Query 传入(可选)

ws://{ip}:45152/ws/device/list?treePath=压缩机&deviceName=螺杆&abnormal=true
参数类型说明
treePathString组织树路径(tree_path)模糊匹配
deviceNameString设备名称(device_name)模糊匹配
abnormalBooleantrue仅异常(预警/报警);false仅正常;不传则不过滤

Query 值会做 UTF-8 URL 解码。

4.2 连接后通过 JSON 文本消息更新(可选)

客户端可随时发送 JSON 文本,立即触发一次推送,后续仍按 60 秒周期推送。

{ "treePath": "注采站", "deviceName": "压缩机", "abnormal": true }

格式错误时服务端返回:

{ "code": 500, "message": "消息体须为 JSON,字段:treePath、deviceName、abnormal", "data": null }

5. 推送规则

时机行为
连接建立解析 URL Query → 启动定时任务 →立即推送
定时任务60 秒推送一次(PUSH_INTERVAL_SECONDS = 60
收到客户端 JSON更新筛选条件 →立即推送
连接关闭 / 传输异常取消该 session 的定时任务
服务销毁@PreDestroy取消所有任务并关闭线程池

6. 消息格式

6.1 成功响应

结构与 HTTP 接口一致,为Result<List<TwinbornDeviceSearchVo>>

{ "code": 200, "message": "success", "data": [ { } ] }

6.3 失败响应

{ "code": 500, "message": "设备列表推送失败", "data": null }

7. 与 HTTP 接口对照

对比项WebSocketHTTP
地址ws://.../ws/device/listPOST /device/list
参数方式URL Query 或连接后发 JSON 文本Request Body JSON
返回结构Result<List<TwinbornDeviceSearchVo>>相同
业务逻辑twinbornService.listDevices(query)相同
推送连接后即时 + 每 60 秒单次请求单次返回

8. 内部实现要点

8.1TwinbornWebSocketConfig

registry.addHandler(deviceListWebSocketHandler, "/ws/device/list") .setAllowedOrigins("*");
  • 注册 Handler 与路径

  • 启用 Spring WebSocket(@EnableWebSocket


. 前端接入示例

9.1 原生 WebSocket

const ws = new WebSocket( 'ws://{ip}:45152/ws/device/list?treePath=压缩机&abnormal=true' ); ​ ws.onmessage = (event) => { const result = JSON.parse(event.data); if (result.code === 200) { console.log('设备列表', result.data); } else { console.error(result.message); } }; ​ // 动态更新筛选条件(会立即收到新推送) ws.send(JSON.stringify({ treePath: '注采站', deviceName: '压缩机', abnormal: false })); ​ ws.onclose = () => console.log('连接已关闭');

9.2 典型使用场景

  1. 大屏/监控页:建立长连接,每 60 秒自动刷新设备健康状态

  2. 带筛选的列表页:URL 带初始条件,用户改筛选时sendJSON 即可


10. 注意事项

  1. 单向推送为主:服务端主动推送;客户端发消息仅用于更新筛选条件

  2. 无心跳机制:依赖 60 秒定时推送;网络断开后需前端自行重连

  3. 无鉴权:当前 Handler 未做 Token / Session 校验

  4. 并发安全:同一 session 发送使用synchronized(session)

  5. 空参数:不传筛选条件时返回全部未删除设备(与 HTTP 行为一致)


11. Maven 依赖

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询