生成在线用户列表?

时间:2012-01-16 11:04:43

标签: php javascript ajax apache

我写一个聊天应用程序并不是很棒,而且我想让一个人上班,我最近从here下载了一个,到目前为止我还是很好,就像我一样在XAMPP上测试了它,但我有一个轻微的问题。我正在尝试生成一个在线用户列表,以给它一个更实际的应用程序感觉,但问题是,我不知道如何轻松地做到这一点。

当用户登录我的网站时,会创建一个名为g_username的会话(聊天显示'用户名',但我会解决这个问题),从我目前看来,最简单的方法是将他们的用户名存储在一个名为OnlineUsers的数据库中并通过Ajax调用该数据,但另一个问题是它是基于会话的,有时用户可以离开,而无需注销,我打算运行脚本来注销用户从OnlineUsers表中删除会话。

如果他们离开而没有退出,他们将永远在线!我可能会在每个页面上添加一些代码,在页面关闭时切换ajax事件,该事件是一个杀死其OnlineUsers表记录的脚本,但是当用户在页面之间跳转时,这将加载服务器无用的查询,据我所知。

在Ajax中创建我的整个网站并不是一个真正的选择,因为它是一个不同网站的组合,从社交服务的社交“层”(如果你愿意)到1'地方'。

有没有人看到这样做的方法有意义,并且易于集成,并且与Apache一起使用,而无需命令行访问?

2 个答案:

答案 0 :(得分:0)

你可以在服务器上每60秒左右运行一次cron作业[如果你有cpanel],检查用户上次通过聊天发送任何内容的时间,如果他们没有在最后一次发送,请说5分钟然后删除他们的条目来自在线用户列表。

答案 1 :(得分:0)

您可以将数据库中存储用户上次操作的时间戳,比较输出在线用户时的时间戳,并确保最多1分钟前完成。

在所有/重要页面上运行: (确定上一个操作是否已过时,您还可以检查它是否在一分钟前完成以减少数据库负载)

if($user['lastAction'] < time()) {
   //update into database, last action is outdated
}

在线计算用户数量并且在每个时间戳的循环内

//If the users last action was within a minute, the user is most likely online    
if(($row['lastAction']- time()) > 60*60)
       //count user as online