您的位置 首页 java

解决nginx下websocket的长连接问题

项目上的预警通知,之前是通过前端定时轮询的,性能上存在一定问题,本次希望改成websocket的方式。技术预演使用spirngboot单独部署个后台应用,前端用html测试即可。

后端关键代码:

解决nginx下websocket的长连接问题

后端

前端测试html

解决nginx下websocket的长连接问题

前端收到后台的消息

解决nginx下websocket的长连接问题

前端界面

后端收到前端的消息。

解决nginx下websocket的长连接问题

后台

乍一看,没啥问题, 但一分钟后,却自动关闭了,前端出现close.咋回事??

解决nginx下websocket的长连接问题

自动关闭了

检查nginx配置,配置如下:

location /basic/ {

proxy_set_header Upgrade $http_upgrade; #这是webSocket的配置

proxy_set_header Connection “Upgrade”; #这是webSocket的配置

proxy_http_version 1.1; #这两个最好也设置

proxy_pass

}

原来是没有设置proxy_read_timeout,proxy_read_timeout 默认60s断开,

可以把他设置大一点,你可以设置成自己需要的时间,我这里设置的是十分钟(600s).

修改配置如下,重启 nginx : nginx.exe -s reload

location /basic/ {

proxy_set_header Upgrade $http_upgrade; #这是webSocket的配置

proxy_set_header Connection “Upgrade”; #这是webSocket的配置

proxy_http_version 1.1; #这两个最好也设置

proxy_read_timeout 6000s;

proxy_pass

}

再访问后, 6000s内 不会超时了,但超过仍然会,所以还是得从根本上解决问题。

解决nginx下websocket的长连接问题

连接之所以断掉,是因为在有限的时间内没有通信,如果每隔一定时间,发送和接收内容,那连接便不会断掉,所以需要加入心跳机制,而STOMP 1.1版本的帧,heart-beating(心跳)是默认启用的,默认10秒。也可以自行修改,例如改为5秒发一次消息

解决nginx下websocket的长连接问题

后端也得改造下:

解决nginx下websocket的长连接问题

再次尝试,超过 6000s后仍然可以收发消息,观察控制台,会有pingpong类似心脏跳动的输出,5秒一次输出,证明改造成功。

解决nginx下websocket的长连接问题

以上就是测试demo,有错误的欢迎指正!!

文章来源:智云一二三科技

文章标题:解决nginx下websocket的长连接问题

文章地址:https://www.zhihuclub.com/196542.shtml

关于作者: 智云科技

热门文章

网站地图