解决方案 »

  1.   


    能说明下不建议监听页面有哪些出发点或者顾虑么?另外更新用户操作时间,我理解为监听页面的点击事件(发生点击,传送一个请求给server更新用户操作时间),server端进行心跳检测。但是如此会加重我们的服务器压力,您觉得呢?
      

  2.   

    1、关闭浏览器的方式很多,所以unload()/unbeforeunload() 就别考虑了;
    2、1楼的方法没有解决问题,也不用考虑了;
    3、心跳是可行的,但你有俩问题:
          3-1、怕增加服务器压力?
                    这个你最好测试一下,压力会有但肯定不大,浏览器定时发请求,服务端只是很简单的处理,又不涉及数据库操作,基本没                啥压力;
          3-2、心跳触发问题,没明白 心跳会有什么触发问题?!采用心跳方式,就不需要server端count+-这种操作,每次重新获取一次在线用户集合大小就可以了。
      

  3.   


    “采用心跳方式,就不需要server端count+-这种操作,每次重新获取一次在线用户集合大小就可以了。”能否具体说明下,我理解是每次客户端发生动作便发送一个请求给服务端,服务端接收该请求同时记录当前动作更新时间,server端增加一个心跳检测,例如每隔1h将用户动作更新时间与当前时间进行比对,大于1h则说明已经离线,否则在线。但我感觉我的理解和你想表达的意思是不同的,能否再次请教下您?
      

  4.   

    前台每个页面增加一个“setInterval”,每隔30秒向后台发送一个心跳请求;
    后台定义一个静态map,key是用户名(唯一),value是用户最后一次心跳请求时间(用时间戳);
    每次心跳请求都刷新map中的该用户的心跳请求时间;后台统计就简单了,
    遍历map,判断心跳时间,时间比当前时间早2分钟(自己设置,最少大于30秒),就认为该用户离线了,不统计在在线用户中,甚至可以从map中移除了。