CS架构中服务器确认客户端是否在线的方法
我现在用的方法是这样的:
用户表中有一个IsOnline和ActiveTime字段,用户登录后IsOnline属性就为true,然后客户端每隔3秒给服务器端发送一个心跳包,刷新ActiveTime字段为当前时间,服务器每隔30秒扫描一遍IsOnline属性为true的用户,发现最后收到的心跳包时间与当前时间之差大于10秒的(保守假设在通信线路上消耗的时间为2秒,那么正常情况下服务器是每5秒收到一个心跳包,10秒即连续收不到两个心跳包),那么,便将该用户的IsOnline属性置为false,表明该用户断线了。
这样的问题是:
假如有3W个在线用户,那平均每秒就有1W个包发到服务端,而且会执行1W条update语句,这个开销太疯狂了,而且还会随着用户的增加等比例上升。
大家做这种应用的时候是采用什么方法的呢?分享一下
PS:好奇QQ是采用什么样的方式才判断用户在线状态的。。