WebSocket频繁收到客户端断开、重连消息,nginx配置自动断开问题
在我是项目开发中用到Socket收发客户端消息,发现在开发环境中,ws服务频繁收到客户端断开、重连问题,最后利用nginx代理websocket的时候,发现客户端和服务器握手成功后,如果在60s时间内没有数据交互,连接就会自动断开。
如果需要保持长连接,可以采取来两种方式.
1.nginx.conf 设置proxy_read_timeout时长。配置如下:
server { listen 80; server_name carrefourzone.senguo.cc; #error_page 502 /static/502.html; location /static/ { root /home/chenming/Carrefour/carrefour.senguo.cc/source; expires 7d; } location /ws { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://127.0.0.1:9887; proxy_http_version 1.1; proxy_set_header Upgrade "websocket"; proxy_set_header Connection "Upgrade"; proxy_read_timeout 600s; } }
这种方式只能维持在设置的时间短内长连接。
2.客户端发心跳
在客户端ws服务类中定时添加发送检测心跳消息即可(定时时长需小于nginx设置时长),代码如下:
ws.publish({ type:'ping' })
努力吧,为了媳妇儿,为了家。。。