zoukankan      html  css  js  c++  java
  • Ajax Comet 聊天中的掉线判断

    ajax comet连接如果成功返回或超时,应该立刻建立新的长连接。

    但如果遇到特殊情况,如停电等,长连是无法连回去的。这个情况等于是掉线(可以用结束浏览器进程模拟)

    异步超时,是throw了一个TimeoutException类型的错误。我们可以通过捕获这个错误来判断掉线

    大体思路如下

    1、长连接建立时,记录连接进来的时间

    2、超时时(即错误被捕获时),记录超时的时间

    3、超时后,等几秒(如5秒),获取长连接进来的时间和超时的时间进行比较,如果连接时间<超时时间,则认为是掉线。理想情况下,因为是超时后等5秒才去判断,所以判断中取到的连接时间是重新建立的长连接的时间,必然比超时时间晚

    但是在负载均衡环境中经常出问题。

    单独在某一台服务器上都很正常,但是一到场环境就某明奇妙的出现掉线。

    其原因在于 几台服务器之间时间不一致(百思不得其解 灵光一闪想到可能是这方面的原因)。

    比如有A,B两台机器,B上的时间比A上的时间慢5秒

    长连接第一次进入,负载到A,记录进入时间为0:0:1秒,30秒后超时,记录超时时间为0:0:31秒

    此时长连接重新连回,负载到B上,比如这个时候是0:0:32秒,但是B的时间比A的时间慢5秒,记录的连回时间为0:0:27秒,比超时时间小,所以被认为是掉线。

    解决方法:

    1、在比较时给连回时间加几秒;或者做个减法,看他们值是否大于某一个范围;等等方式 使他有个缓冲。

    2、给几台服务器设置时间一致,可以使用同一个时间服务器来保证他们的时间是一致的。

  • 相关阅读:
    wxpython 简单例子:显示文本框的窗口显示鼠标位置
    wxpython学习:创建最小的空的wxPython程序
    wxPython学习笔记
    5G PDCCH 协议
    FPGA学习
    CCS 5.5下载地址http://www.dianyuan.com/bbs/1492792.html
    朴素贝叶斯
    决策树最后的存储 检测
    决策树 绘图
    决策树 书上的例题
  • 原文地址:https://www.cnblogs.com/czcz1024/p/2685128.html
Copyright © 2011-2022 走看看