发布一场考试,有结束时间 定时器该怎么处理

chern

需求是 房间有开始&结束时间 比如2018-1-8到2018-1-10 答题时间为2小时,用户超过到达2小时自动提交 或者截止时间自动提交

如果进程开启打开一个定时器(20s) 轮询查mysql roomId 通过roomId查询reids对应房间详情 怎么能做到没有时间差

用户进入考试开启2小时定时任务,命中条件销毁。
房间的定时器该怎么设置,如果有一百场考试 是通过进程的轮询定时器去查询是否有新创建的房间 针对每个房间开启一个对应的定时器吗?

定时器过多会不会影响效率

372 3 0
3个回答

晚安。

用消息队列,延时处理

梦想世界

用户进入试卷答题,时间为1小时,1小时后。自动提交的话,是不是需要把用户前面已经做好的题要提交过去,不然用户就是0分了

  • 梦想世界 2024-04-18

    这里假如完全由后台来判断的话,是不是获取不到用户已经做好的答案,是不是不太合理

  • chern 2024-04-18

    可以用缓存来保存用户每次的答题记录,这样最后结算的时候从内存里拿去也会快一些 ,最后再统一入库

  • 梦想世界 2024-04-18

    哦,实时保存答案,用户做一道题前端就提交过来保存嘛

  • chern 2024-04-18

    我是这么考虑的
    参与考试,查询队列是否有该场考试,如果没有,计算考试倒计时push队列,同步开始用户倒计时push到队列
    倒计时结束socket推送前端强制提交
    用户选择一次,提交一次问题、答案 判断对错然后存入redis
    考试结束,pop reids该场考试数据 逐步入库

z985342160

前提

开始与截止时间已明确,前后端都对时间做判断,大于截止时间不允许答题

做法

  1. 后台定时查询到期的考试,然后提交
  2. 前后setTimeout()或setInterval()定时提交。可以做一个倒计时功能提示用户还剩N秒后自动交卷,到时间后就提交。

1和2可以互补

  • chern 2024-04-19

    前端的时间 只是呈现给用户的 并不能取做任何功能使用 可以篡改的

  • z985342160 2024-04-19

    前端是辅助效果,后端也要检验的

🔝