高手请进->在线人数统计

lindeqiang 2006-12-20 03:23:05
各位高手!小弟我不知道用jsp怎么去统计在线人数,以前也看过一些资料
大多是通过 java的httpsessionlistener接口实现的
但是有个问题,就是不能准确地统计,比如登录进来,让计数器++,这个肯定没有问题,但是要是XX用户离开,就要等session自然失效,计数器才--,这样就非常麻烦...
希望大虾指点,现在小弟分不多了,笑纳40,解决问题就发分!谢谢
...全文
248 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lindeqiang 2006-12-20
  • 打赏
  • 举报
回复
通过以上,虽不能完全解决我的问题,但是非常感谢各位关注!
个别感谢rg_nightkid,多次关注本问题的进展,
本人诚信第一,希望以后能成为朋友!
现在结贴!划分~~~~
rg_nightkid 2006-12-20
  • 打赏
  • 举报
回复
我没有现成的代码,原理是没错的。我的代码以前已经测试过了,应该没问题
wuzeng2002 2006-12-20
  • 打赏
  • 举报
回复
用户非法退出的时候,直接关闭浏览器的时候可以用JS监听浏览器关闭事件,在关闭事件里提交服务器把用户设置为离线
怎么实现 能说说吗? 谢谢 你发的代码 直接关闭浏览器也不可以啊
rg_nightkid 2006-12-20
  • 打赏
  • 举报
回复
用户非法退出的时候,直接关闭浏览器的时候可以用JS监听浏览器关闭事件,在关闭事件里提交服务器把用户设置为离线.
如果是用户正在浏览,突然电脑断电,这种没办法解决的
xiaoliu15520 2006-12-20
  • 打赏
  • 举报
回复
我试了一下你的方法 用户退出 检测不到啊。。
关注。。。
lindeqiang 2006-12-20
  • 打赏
  • 举报
回复
那么,这个就有一定的缺陷,我希望能把实际在线人数的准确性 起码要保证误差在5秒之内的
因为我要做一个虚教室,要是学生进来,页面显示有n个人,但实际上在前一刻,都已退出,就造成错误,希望能提出更好的方案,谢谢
----继续关注
rg_nightkid 2006-12-20
  • 打赏
  • 举报
回复
你好!rg_nightkid
我想问一下Servlet的sessionDestroyed()方法在什么时候起作用啊?
假设用户突然断电,它能检测得到吗?
____________________________
设session过期时间就完了,检测不到
lindeqiang 2006-12-20
  • 打赏
  • 举报
回复
原先有一个很弱弱的想法就是想用Socket,但是要在服务端启动服务端程序,还是不懂!
各位大虾,指点指点~~
lindeqiang 2006-12-20
  • 打赏
  • 举报
回复
你好!rg_nightkid
我想问一下Servlet的sessionDestroyed()方法在什么时候起作用啊?
假设用户突然断电,它能检测得到吗?
rg_nightkid 2006-12-20
  • 打赏
  • 举报
回复
1.监听类
import javax.servlet.http.HttpSessionListener;
import javax.servlet.http.HttpSessionEvent;
import org.apache.log4j.Logger;
import com.link2friend.friend.business.common.BusinessSysFactory;
import com.link2friend.friend.business.common.BusinessFactoryIF;
import com.link2friend.friend.business.common.BusinessFactoryName;
import com.link2friend.friend.business.option.LoginIF;
import com.link2friend.friend.dataobject.UserInfoData;

public class SessionListener implements HttpSessionListener {
private Logger logger=Logger.getLogger(this.getClass());

private long count=0;
public synchronized void sessionCreated(HttpSessionEvent se) {
this.count=this.count+1;
se.getSession().getServletContext().setAttribute("count",this.count+"");
}
public synchronized void sessionDestroyed(HttpSessionEvent se) {
this.count=this.count-1;
se.getSession().getServletContext().setAttribute("count",this.count+"");
}
}
}

2.web.xml注册:
<listener>
<listener-class>com.link2friend.friend.sessionlistener.SessionListener</listener-class>
</listener>

3.JSP页面使用:
<%=application.getAttribute("count")%>

81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧