我给一个比较有趣的做法,当然很耗费资源。那就是持续连接。。。。
你做一个包含页面,。让每个可访问的页面都用ajax/iframe调用这个。
这个页面的核心代码大致如下。
if
(
true
) {
//
防止编译错误,说后面的代码不能到达
while ( true ) { // 死循环
try {
out.println(); // 输出一个空行
out.flush(); // 这一句必须写
// 检查当前在线人员,确保它没有被删掉
check(session);
try {
Thread.sleep( 10 ); // 休眠一下吧
} catch (Exception ex) {
}
} catch (Exception ex) {
// 一旦发现异常,则证明此用户已经离开当前页面
// 从在线人员里面删掉当前人员
remove(session);
}
}
}
while ( true ) { // 死循环
try {
out.println(); // 输出一个空行
out.flush(); // 这一句必须写
// 检查当前在线人员,确保它没有被删掉
check(session);
try {
Thread.sleep( 10 ); // 休眠一下吧
} catch (Exception ex) {
}
} catch (Exception ex) {
// 一旦发现异常,则证明此用户已经离开当前页面
// 从在线人员里面删掉当前人员
remove(session);
}
}
}
用户同时打开多个页面会造成多个持久连接,没办法,因为你无法确定用户会关闭哪个页面哦。
这个方法可以在用户和服务器之间保持一个持久的连接,一旦异常,则该用户就离开了这个页面。
此方法可以最大限度的精确在线人员数,但是也非常耗费系统资源。 思路借鉴于网游。