WebSocket注意事项
使用java开发websocket服务, 有两种主流框架, 一种是通过spirng-websocket一种是通过javax, 两者的使用方式都很简单, 这里推荐使用spring-websocket, 对于websocket协议标准支持比较完善
websocket超时时间
spring-websocket | javax | |
---|---|---|
连接超时时间 | 默认与服务器web session, 一般为30分钟 | 默认60s |
由于目前前端一般使用nginx服务器发布, websocket连接会回经过nginx代理转发, nginx默认的连接超时时间为60s, 所以有时候在服务器端设置了大于60s的会话超时时间, 前端仍然会在60s过后就断开连接, 一种解决方案是将nginx的会话时间设置长一点, 一种是做心跳检测.
心跳检测
标准做法
在websocket规范(RFC6455)中 ,WebSocket控制帧有3种:Close(关闭帧)、Ping以及Pong
控制帧是由操作码上的位值置为1来定义的。
目前,控制帧的操作码定义了0x08(关闭帧)、0x09(Ping帧)、0x0A(Pong帧)。0x0B-0x0F是为那些将来可能定义而目前尚未定义的控制帧预留的。
控制帧用于WebSocket协议交换状态信息,控制帧可以插在消息片段之间。
注意:所有的控制帧的负载长度务必不大于125字节,并且禁止对控制帧进行分片处理。
websocket连接心跳ping/pong,**截止目前, 主流浏览器中没有相关api发送ping给服务器, 只能由服务器发ping给浏览器, 浏览器返回pong消息. **所以, 如果要做心跳连接检测, 最好的办法就是在服务端对连接进行检测
其他做法
标准做法是将心跳信息做到了协议层, 非标准做法则是将ping/pong消息做到应用层, 也就是规定发送的消息格式, 在消息里定好各种状态, 当解析到ping/pong的状态码时做特殊处理, 前后端通过这样统一的规则进行通信, 这样也可以实现心跳检查保持会话不中断
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现