我想站在程序设计的思路上来说点问题,看了很多程序员论坛,大都贴代码,而且还是无耻的复制粘贴那种,这里提出两点质疑:1.人不是计算机,人需要的是设计思路,而不是电脑代码。就正如架构师给程序员从来都讲设计思路一样。2.大段粘贴代码而不用语言本身表述,其本身就拒人于千里之外了,而且要考虑到语言、环境不同的问题,在你机器上能实现的东西不一定在别人的机器上实现的了。所以,本人决定从思路来表述。
实现实时检测用户在线,有两点困难,一是页面呈现上的困难,二是检测用户是否在线的困难;
为什么页面呈现有困难呢?传统的网页都是客户端提交页面接受服务器端信息的通信方式。那么当你浏览页面的时候,如果不提交就无法从服务器端获得更新的信息。例如你的显示器页面上显示A在线,可是A马上就在此时下线了,如果你不刷新页面的话,页面上还是显示的A在线。因此,这就是传统页面通信上导致页面呈现的困难。
解决思路:ajax不刷新页面可以与服务器进行通信。例如在呈现页面中做一个show()函数,该函数负责呈现页面的数据,它在页面加载完成的时候触发,以后每隔3秒钟触发一次。另外,该函数本身通过ajax调用另外一个页面的代码与数据库进行异步通信,获取用户在线信息并作为返回值返回当前的呈现页面。这样,就做到了不刷新当前呈现页面并实时与数据库交互,显示用户的当前在线情况。
为什么说检测用户是否在线困难呢?因为用户可能随时关掉浏览器而不使用正常的退出方式,同时也可能突然转向到另外一个网站去了,过4分钟再转回来。在这个间隙期间内用户是不在线的。那么,用常规的session超时手段来检测用户是否在线显然不是个好主意(而且这样的手段经常不准确)。那么,