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的状态码时做特殊处理, 前后端通过这样统一的规则进行通信, 这样也可以实现心跳检查保持会话不中断


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM