处理后端与Android之间WebSocket连接经常断开的情况

nginx配置ws转发

location ~ /(mq|ws)/ {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_read_timeout 600s;
    proxy_send_timeout 600s;

    proxy_pass http://mq-service;
}

添加头部信息,这两个字段表示请求服务器升级协议为WebSocket:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;

默认情况下,连接将会在无数据传输60秒后关闭,proxy_read_timeout参数可以延长这个时间。源站通过定期发送ping帧以保持连接并确认连接是否还在使用。

  • proxy_read_timeout

    该指令设置与代理服务器的读超时时间。它决定了nginx会等待多长时间来获得请求的响应。 这个时间不是获得整个response的时间,而是两次reading操作的时间。

  • proxy_send_timeout

    这个指定设置了发送请求给upstream服务器的超时时间。超时设置不是为了整个发送期间,而是在两次write操作期间。 如果超时后,upstream没有收到新的数据,nginx会关闭连接

Android/微信小程序心跳机制

  1. 定时发送心跳包。如果发送失败,就进行重连。
  2. 一些关键的操作,可以在重连后,根据实际情况,立刻进行调用

参考:
https://www.xncoding.com/2018/03/12/fullstack/nginx-websocket.html

发布了166 篇原创文章 · 获赞 118 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/asahinokawa/article/details/100086720
今日推荐