我正在构建一个后端模块(用 PHP 编写),它将用于监视在 [Exactly] 300 seconds (5 minutes) 内没有活动的私人聊天室。如果是,脚本将更新数据库(将最大用户设置为某个数字,以及其他内容)。我正在通过 now() 和发送的最后一条消息的时间差来监控空闲时间的跨度。
我所做的:设置一个 cron 作业,它将每分钟或 60 秒运行一次(通过 php-cli)我的监控脚本。监控脚本内部:
$expire_time = time() + 60;
//this loop will run for 60 seconds
while(time() < $expire_time)
{
$idle_time = get_all_chatrooms_idle_time();
foreach($idle_time as $s_time)
{
if($s_time >= 300)
{
update_changes();
}
}
usleep(500000);
}
在 300 秒空闲时间后立即设置最大用户数的条件无法讨价还价。所以我不能真正遵循这样的建议:“避免做任何事情,直到有事情真正要求它”,即使它很有意义。
原因?活跃和不活跃聊天室的数据需要是实时的,因为它也会显示在仪表板上。聊天室版主的报酬取决于此。
为什么不在每次仪表板负载时检查它们?我很抱歉,但仍然不可能。
检查需要在服务器端进行,仪表板使用 ajax 更新自身,每秒轮询一次。
当我将监控代码附加到我的 ajax 调用所请求的页面时,我认为它比我当前的实现更占用资源(如果我错了,请纠正我)
让我粗略估计一下用户数量,这样你就可以想象我们得到的负载/流量:
- 包括版主在内的聊天人数:~800
- 聊天室数量:~250
- (x) 聊天室版主人数:~50
- (x) 我的老板和他的员工:
(x) - 可以查看仪表板
有没有更好的办法?我做对了吗?