type
status
date
slug
summary
tags
category
icon
password
说在前面:
该文章主要分享WebSocket于无人机项目以及CEX项目中的使用方式以及踩过的坑。
📝 与传统HTTP请求的区别
- 连接方式不同:
- HTTP请求:每次请求都需要建立新的连接,请求完成后连接关闭(无状态)
- WebSocket:建立一次连接后保持长连接,可以双向通信
- 通信方向不同:
- HTTP请求:只能由客户端主动向服务器发起请求获取数据
- WebSocket:服务器可以主动向客户端推送数据
- 性能差异:
- HTTP请求:每次请求都有HTTP头部开销,频繁请求会造成较大负担
- WebSocket:建立连接后数据传输开销小,实时性高
- 适用场景:
- HTTP请求:适用于获取静态数据、提交表单等一次性交互
- WebSocket:适用于需要实时更新的场景,如聊天、实时行情、游戏等
🔗 建立连接
前端通过SockJS和Stomp协议建立WebSocket连接:
♥ 心跳机制
之所以需要 Pong 响应机制,是因为在连接客户端和服务端之间发送数据时,底层的网络传输有可能会发生数据丢失的情况
心跳机制通常包含两个部分:
- 定时发送心跳包(Ping)
- 定时接收并回应心跳包(Pong)
- 检测超时(如果没收到 Pong,就断开重连)
🤭 踩过的坑
1.如果不主动关闭浏览器,WebSocket 连接理论上会一直保持。
这样会造成极大的内存占用,甚至于让整个页面崩溃。
一定要主动断联,清除缓存。
顺口一谈:类似于无人机项目推流回调视频流的情况,还需要将视频流清除否则也会不断地获取视频数据。
2.当连接到同一地址但需要不同的数据时,怎么处理?
这是最经典和灵活的解决方案。客户端在连接建立后,向服务器发送一个“订阅”消息,指明需要哪些数据。服务器收到后,开始向该客户端推送相应的数据。
步骤:
- 建立连接到通用地址,如
wss://api.example.com/stream。
- 连接成功后,立即发送一个包含订阅信息的消息。
- 服务器根据订阅信息过滤并推送数据。
- 客户端可以随时发送“取消订阅”消息来停止接收某些数据。
- Author:Ashland
- URL:http://preview.tangly1024.com/article/26bcccc0-3782-8077-93df-c9951e46c17b
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!









