前提:现在存在一种情况,如果是我的心跳设置为90S,当运营商那边压力较大的时候,会淘汰 NAT 表中的对应项,造成链路中断(这个测试是偶然性的爆发的,也许是一个月会出现几次,也许是几天就会出现一次),现在测试的结果是30S,socket通道才不会断。现在问题来了,我们的服务器,现在最大的并发量是20000,也就是说我的心跳间隔不能太短,太短的话,会对服务器造成太大的压力,但是如果心跳间隔超过了30S就会出现socket通道频繁关闭的情况,我的这种情况该怎么解决呢我想的策略一:一种是当通道断开的时候,心跳时间设置为20S,然后发送心跳,每成功一次就增加10S时间的心跳间隔,直到最高的心跳间隔,以现在的数据来计算,不超过两分钟就又会重连,这种方案不可取,1.不到两分钟就会断,2.每次重连会照成流量的耗损,这个耗损很高的,每次重连,会照成3KB左右流量的消费现在集思广益,求解决方案

解决方案 »

  1.   

    既然是你们自己的服务器,可以自己设置最大空闲时间的吧。如果服务器设置最大空闲是30s,那你客户端想保持连接,心跳只能小于30s你的策略一动态改变心跳间隔,目前来看应该是最好的至于重连会造成3kb的流量浪费,那是你们业务问题,或者没设计好
      

  2.   

    目的是为了减小服务器的压力,因为用户量比较大,只能是客户端这边来处理,但是客户端这边需要保持socket通道不断,只能是减少心跳的间隔,所以现在很纠结,寻求更好的解决方案
      

  3.   


    流量的浪费是因为在重连的时候,要发送一次http请求的,流量在这边损耗很大的
      

  4.   

    有个疑问 为什么两分钟会重连? socket不会因为心跳时间增加而断开吧! 而且你说的运营商问题也是几天才一次 所以不明白为什么按照你的两分钟就会重连我的想法是既然是几天才一次 干脆就直接设置比较长的心跳时间 我们之前是比你的时间间隔还长,就是网络层自己在后台做重连机制,基本不影响体验 
    另外请教一下运营商删表的行为是你们测试出来的么!好像我们都没遇到过,望指点!
      

  5.   


    这个是会出现的,我给你看一篇文章的,它上面说了具体情况的,这个情况只会出现在2G和2.5G的
    http://tech.sina.com.cn/i/csj/2013-04-16/09368244003.shtml