java倒计时问题
我用jsp+servlet做个考试系统,那个考试系统有个倒计时功能,如果客户端网络突然断了,就必须把考试用的时间存到数据库中,这样下次考试才能继续连接,时间也能衔接上,请...
我用jsp+servlet做个考试系统,那个考试系统有个倒计时功能,如果客户端网络突然断了,就必须把考试用的时间存到数据库中,这样下次考试才能继续连接,时间也能衔接上,请问这个怎么实现呢,服务器端怎样判断客户端突然掉线什么的呢?
展开
3个回答
展开全部
只能通过超时机制来判断是否掉线,即客户端与服务端之间定期的维持一个简单的通信,如果服务端在一段规定的时间内没有相应则认为是掉线了。
---------------------------------------------------------------
这种方法实现也不是很难,但是需要消耗服务器的资源。一种解决方法是设置session的超时时间,然后在前台页面上隐藏一个iframe来不断与服务器通信(比如刷新)以保持session的有效性。当用户非正常下线的话通过超时就能检测出用户的在线状态。
---------------------------------------------------------------
这种方法实现也不是很难,但是需要消耗服务器的资源。一种解决方法是设置session的超时时间,然后在前台页面上隐藏一个iframe来不断与服务器通信(比如刷新)以保持session的有效性。当用户非正常下线的话通过超时就能检测出用户的在线状态。
展开全部
client端以Ajax方式, 以较短时间区间(例如3秒), 在背景发送请求到Server端的某个servlet, 若Ajax请求发送失败且重试数次还不成功的话, 则client可以关闭考试画面, 让使用者无法再继续进行。
而Server端被请求的Servlet, 则以存放在session中的Timer来检查, 某个client是否有逾时还没有背景请求到达, 若未逾时就重设Timer重新倒数计时, 否则将已经使用的考试时间储存起来, 并将session中的Timer移除。
若能以Keep alive的方式保持HTTP connection, 将更为理想。另外, Server端倒数计时的时间, 必须足够client重试请求的发送, 否则将会让client与server的状态不一致!
而Server端被请求的Servlet, 则以存放在session中的Timer来检查, 某个client是否有逾时还没有背景请求到达, 若未逾时就重设Timer重新倒数计时, 否则将已经使用的考试时间储存起来, 并将session中的Timer移除。
若能以Keep alive的方式保持HTTP connection, 将更为理想。另外, Server端倒数计时的时间, 必须足够client重试请求的发送, 否则将会让client与server的状态不一致!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
服务器端应该是无法判断客户端是否掉线的,你的考试系统应该是在客户端答题,最后将答案统一提交给远程服务器上。
关于你所提到的突然中断的问题,我想你的需求上可能有问题,考试时间肯定是以服务器端的为准的,若客户端的网络中断了,恢复后还能继续考试的话,那考试的时间岂不是可以无限拖延么, 本来一个120分钟的答卷结果可以做上3天,任何一个考试系统应该不会有这么大的bug吧,你在好好考虑下功能需求
关于你所提到的突然中断的问题,我想你的需求上可能有问题,考试时间肯定是以服务器端的为准的,若客户端的网络中断了,恢复后还能继续考试的话,那考试的时间岂不是可以无限拖延么, 本来一个120分钟的答卷结果可以做上3天,任何一个考试系统应该不会有这么大的bug吧,你在好好考虑下功能需求
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询