最近在做消息推送, 在监听用户是否在线时有个问题 就是: 用户正常退出的话可以清除用户在服务端的共享信息 ,但是用户如果关闭窗体没有与告知服务器,用户的信息还会保存在服务端。
解决这个问题需要检测到客户的关闭窗体事件:
<script type="text/javascript">
window.onbeforeunload = onbeforeunload_handler;
function onbeforeunload_handler() {
var warning = "啊大是大非是大法师大法是大法师大法是否?";
return warning;
}
</script>
当然如果用户的电脑关闭的话 或者 网络中断都会影响用户的实际在线状态 。那么更可靠的方法事记录客户最后一次发送请求的时间 如果在规定时间内再无请求的话,服务端主动更新用户的在线状态,不过这样的操作需要成本:数据库不停的检测在线用户的最后请求时间。相对于客户端的主动下线服务端的操作更为复杂,除了数据库不停的检测在线用户的最后请求时间外还有之后的操作,比如其他在线用户需要知道当前的用户还需要不停的请求数据库,如果客户端主动的话这些都不复杂了。
个人理解的东西,如果有高人有其他见解,请多指教。