在线考试方法和装置、计算设备及存储介质
技术领域
本说明书涉及在线考试技术领域,特别涉及一种在线考试方法和装置、计算设备及存储介质。
背景技术
在现今的生活中,网络如此发达,通过在线考试***即可参加考试,而能否支持大规模应试者同时在线考试是衡量***是否支持高并发的一个重要指标。普通的在线考试***中,以采用服务器集群,增加机器或者根据应试者所在的地域就近访问相应的服务器的方式,增大了硬件费用支出。并且主要的问题在于服务器端压力很大,客户端作为一个独立的***主要完成一些显示功能,资源没有得到有效利用,客户端缓存试题数据和答题数据时采用的是被动缓存策略,不能及时的向服务器请求试题数据,在考试结束时刻,大量应试者同时将答题数据进行提交,很容易造成网络拥塞,增大服务器压力,降低了收卷的成功率。这样很大程度上影响服务器收取全部试卷的成功率,进而使得应试者体验不佳。
发明内容
有鉴于此,本说明书实施例提供了一种在线考试方法和装置、计算设备及存储介质,以解决现有技术中存在的技术缺陷。
根据本说明书实施例的第一方面,提供了一种在线考试方法,应用于客户端,包括:
获取待开考试卷的结构数据信息;
根据所述结构数据信息获取试卷的第一试题数据,缓存所述第一试题数据并根据预设的展示策略展示所述第一试题数据;
获取应试者的答题数据和所述答题进度信息,将答题数据进行缓存;
根据所述答题进度信息和结构数据信息向服务器请求第二试题数据,接收并缓存所述第二试题数据;
根据所述预设的展示策略展示所述第二试题数据,接收应试者的答题数据并缓存;
根据预设的上传策略将所缓存的答题数据以增量传输的方式上传至服务器。
可选地,所述结构数据信息包括:
按照题目序号划分的结构数据信息或按照页码划分的结构数据信息或按照题型划分的结构数据信息。
可选地,所述第一试题数据包括:
所述待开考试卷的一道试题或待开考试卷的一种题型的全部试题或待开考试卷的一页试题。
可选地,所述预设的展示策略包括:
从所缓存的试题数据中提取设定数目道题向应试者展示或以分页展示的方式向应试者展示。
可选地,所述答题进度信息通过以下方式获取:
所述答题进度信息通过获取所述第一试题数据的当前答题位置,根据所述当前答题位置在所述第一试题数据中的比例得到所述答题进度信息。
可选地,所述将答题数据进行缓存包括:
根据答题数据与对应试题题目的关联关系对答题数据进行缓存。
可选地,所述根据所述答题进度信息和结构数据信息向服务器请求第二试题数据包括:
判断所述第一试题数据的答题进度信息对应的比例是否达到设定的阈值;
当判断结果为达到设定的阈值时,获取所述结构数据信息中所述第一试题数据的下一试题数据的信息;
根据所述下一试题数据的信息向所述服务器请求第二试题数据。
可选地,还包括:
当接收到应试者点击页面中上一页或下一页按钮时,根据所缓存的答题数据与对应试题的关联关系加载并展示对应页面的试题数据和答题数据。
可选地,还包括:
当检测到应试者重新输入当前页面的答题数据时,根据当前页面的修改或新增的答题数据及对应的试题序号对所缓存的答题数据进行更新。
可选地,在所述当检测到应试者重新输入当前页面的答题数据时,根据当前页面的修改或新增的答题数据及对应的试题序号对所缓存的答题数据进行更新之后还包括:
若当前页面的修改或新增的答题数据及对应的试题序号所在的缓存答题数据之前已上传至所述服务器,则仅将当前页面的修改或新增的答题数据及对应的试题序号上传至所述服务器。
可选地,所述预设的上传策略包括:
将设定数目道试题的答题数据分批上传或将答题数据按照设定字节数进行分批上传或将答题数据按照试题页码分批上传。
根据本说明书实施例的第二方面,提供了一种在线考试方法,应用于服务端,包括:
通过考试加载对象监听后台发布的考试任务,当所述考试加载对象监听到后台发布第一考试任务时,将监听到的第一考试任务消息添加到消息队列;
通过所述协调者对象对所述消息队列中的消息进行循环处理,针对所述第一考试任务消息创建用以维护所述第一考试任务的考试报告状态的报告对象;
通过所述考试加载对象监听所述第一考试任务的考试元数据是否发生改变,当监听到所述第一考试任务的考试元数据发生改变时,将所述第一考试任务的考试元数据的变化消息添加到所述消息队列;
针对所述第一考试任务的考试元数据的变化消息,通过所述协调者对象通知所述报告对象重新维护所述第一考试任务的考试报告状态。
可选地,还包括:
当通过所述考试加载对象监听到所述第一考试任务考试结束时,将所述第一考试任务从所述考试加载对象中删除。
可选地,所述第一考试任务中每个应试者的考试报告状态包括:
考试未开始;
已进入考试,但考试未结束;
等待考试报告;
生成考试报告;
保存考试报告;
和/或发布考试报告。
可选地,所述第一考试任务中每个应试者的考试报告状态还包括:
批改试卷。
根据本说明书实施例的第三方面,提供了一种在线考试装置,被配置于客户端,包括:
获取模块:被配置为获取待开考试卷的结构数据信息;
展示模块:被配置为根据所述结构数据信息获取试卷的第一试题数据,缓存所述第一试题数据并根据预设的展示策略展示所述第一试题数据;
答题模块:被配置为获取应试者的答题数据和所述答题进度信息,将答题数据进行缓存;
所述获取模块还被配置为根据所述答题进度信息和结构数据信息向服务器请求第二试题数据,接收并缓存所述第二试题数据;
所述展示模块还被配置为根据所述预设的展示策略展示所述第二试题数据;
所述答题模块还被配置为接收应试者的答题数据并缓存;
上传模块:被配置为根据预设的上传策略将所缓存的答题数据以增量传输的方式上传至服务器。
可选地,所述结构数据信息包括:
按照题目序号划分的结构数据信息或按照页码划分的结构数据信息或按照题型划分的结构数据信息。
可选地,所述第一试题数据包括:
所述待开考试卷的一道试题或待开考试卷的一种题型的全部试题或待开考试卷的一页试题。
可选地,所述预设的展示策略包括:
从所缓存的试题数据中提取设定数目道题向应试者展示或以分页展示的方式向应试者展示。
可选地,所述答题模块进一步被配置为:
获取所述第一试题数据的当前答题位置,根据所述当前答题位置在所述第一试题数据中的比例得到所述答题进度信息。
可选地,所述答题模块进一步被配置为:
根据答题数据与对应试题题目的关联关系对答题数据进行缓存。
可选地,所述获取模块包括:
判断单元:被配置为判断所述第一试题数据的答题进度信息对应的比例是否达到设定的阈值;
结构信息获取单元:被配置为当判断结果为达到设定的阈值时,获取所述结构数据信息中所述第一试题数据的下一试题数据的信息;
请求单元:被配置为根据所述下一试题数据的信息向所述服务器请求第二试题数据。
可选地,所述展示模块进一步被配置为:
当接收到应试者点击页面中上一页或下一页按钮时,根据所缓存的答题数据与对应试题的关联关系加载并展示对应页面的试题数据和答题数据。
可选地,所述答题模块进一步被配置为:
当检测到应试者重新输入当前页面的答题数据时,根据当前页面的修改或新增的答题数据及对应的试题序号对所缓存的答题数据进行更新。
可选地,所述上传模块进一步被配置为:
若当前页面的修改或新增的答题数据及对应的试题序号所在的缓存答题数据之前已上传至所述服务器,则仅将当前页面的修改或新增的答题数据及对应的试题序号上传至所述服务器。
可选地,所述预设的上传策略包括:
将设定数目道试题的答题数据分批上传或将答题数据按照设定字节数进行分批上传或将答题数据按照试题页码分批上传。
根据本说明书实施例的第四方面,提供了一种在线考试装置,被配置于服务端,包括:
监听模块:被配置为通过考试加载对象监听后台发布的考试任务,当所述考试加载对象监听到后台发布第一考试任务时,将监听到的第一考试任务消息添加到消息队列;
创建模块:被配置为通过所述协调者对象对所述消息队列中的消息进行循环处理,针对所述第一考试任务消息创建用以维护所述第一考试任务的考试报告状态的报告对象;
添加模块:被配置为通过所述考试加载对象监听所述第一考试任务的考试元数据是否发生改变,当监听到所述第一考试任务的考试元数据发生改变时,将所述第一考试任务的考试元数据的变化消息添加到所述消息队列;
维护模块:被配置为针对所述第一考试任务的考试元数据的变化消息,通过所述协调者对象通知所述报告对象重新维护所述第一考试任务的考试报告状态。
可选地,所述创建模块进一步配置为:
当通过所述考试加载对象监听到所述第一考试任务考试结束时,将所述第一考试任务从所述考试加载对象中删除。
可选地,所述第一考试任务中每个应试者的考试报告状态包括:
考试未开始;
已进入考试,但考试未结束;
等待考试报告;
生成考试报告;
保存考试报告;
和/或发布考试报告。
可选地,所述创建模块进一步被配置为:
批改试卷。
根据本说明书实施例的第五方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述在线考试方法的步骤。
根据本说明书实施例的第六方面,提供了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现所述在线考试方法的步骤。
本说明书实施例中,通过获取待开考试卷的结构数据信息,根据所述结构数据信息获取试卷的第一试题数据,缓存所述第一试题数据并根据预设的展示策略展示所述第一试题数据,获取应试者的答题数据和所述答题进度信息,将答题数据进行缓存,根据所述答题进度信息和结构数据信息向服务器请求第二试题数据,接收并缓存所述第二试题数据,根据所述预设的展示策略展示所述第二试题数据,接收应试者的答题数据并缓存,根据预设的上传策略将所缓存的答题数据以增量传输的方式上传至服务器,通过本说明书的在线考试***,可以支持大规模用户同时在线考试,并且可以保证***平稳流畅的运行,同时可以支持快速收卷。
附图说明
图1是本申请实施例提供的计算设备的结构图;
图2是本申请实施例提供的在线考试方法的流程图;
图3是本申请实施例提供的在线考试方法的流程图;
图4是本申请实施例提供的在线考试方法的流程图;
图5是本申请实施例提供的在线考试方法的流程图;
图6是本申请实施例提供的在线考试装置的模块框图;
图7是本申请实施例提供的在线考试装置的模块框图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本说明书。但是本说明书能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本说明书内涵的情况下做类似推广,因此本说明书不受下面公开的具体实施的限制。
图1是示出了根据本说明书一实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接,数据库150用于保存用户数据。
计算设备100还包括接入设备140,接入设备140使得计算设备100能够经由一个或多个网络160通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi-MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
在本说明书的一个实施例中,计算设备100的上述以及图1中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本说明书范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备100还可以是移动式或静止式的服务器。
其中,处理器120可以执行图2所示在线考试方法中的步骤。图2是示出了根据本说明书一实施例的在线考试方法的流程图,包括步骤202至步骤212。
步骤202:获取待开考试卷的结构数据信息。
本说明书一实施例中,所述结构数据信息包括:
按照题目序号划分的结构数据信息或按照页码划分的结构数据信息或按照题型划分的结构数据信息。
例如,在本说明书一实施例中,在线考试***中有一份4页的数学试卷并且有30道题,在考试未开始之前,服务器会将结构数据信息进行划分,可以按照每10道题划分的结构数据信息,或者可以按照1页页码划分的结构数据信息,或者按照填空题、选择题、计算题题型划分的结构数据信息。
步骤204:根据所述结构数据信息获取试卷的第一试题数据,缓存所述第一试题数据并根据预设的展示策略展示所述第一试题数据。
本说明书一实施例中,所述第一试题数据包括:
所述待开考试卷的一道试题或待开考试卷的一种题型的全部试题或待开考试卷的一页试题。
本说明书一实施例中,所述预设的展示策略包括:
从所缓存的试题数据中提取设定数目道题向应试者展示或以分页展示的方式向应试者展示。
例如,在本说明书一实施例中,在线考试***中进行一个数学考试,应试者通过所述的结构数据信息获取第一试题数据,在页面显示出一页试题或者一道试题或者填空题的全部试题。
通过所述结构数据信息获取第一试题数据,将第一试题数据提前缓存在客户端,减少服务器的工作压力。
步骤206:获取应试者的答题数据和所述答题进度信息,将答题数据进行缓存。
本说明书一实施例中,所述答题进度信息通过以下方式获取:
所述答题进度信息通过获取所述第一试题数据的当前答题位置,根据所述当前答题位置在所述第一试题数据中的比例得到所述答题进度信息。
本说明书一实施例中,所述将答题数据进行缓存包括:
根据答题数据与对应试题题目的关联关系对答题数据进行缓存。
通过获取应试者的答题进度信息,根据所述的答题进度信息结合所述结构数据信息,可以在客户端对试卷的其他试题数据进行预测,并提前缓存在客户端,减少应试者等待下一试题数据,同时获取应试者的答题数据,将所述答题数据缓存在客户端,充分利用了客户端资源,减少了服务器的工作压力。
步骤208:根据所述答题进度信息和结构数据信息向服务器请求第二试题数据,接收并缓存所述第二试题数据。
本说明书一实施例中,所述根据所述答题进度信息和结构数据信息向服务器请求第二试题数据包括:
判断所述第一试题数据的答题进度信息对应的比例是否达到设定的阈值;
当判断结果为达到设定的阈值时,获取所述结构数据信息中所述第一试题数据的下一试题数据的信息;
根据所述下一试题数据的信息向所述服务器请求第二试题数据。
例如,在说明书一种实施例中,在线考试***中进行一场数学考试,应试者对客户端提取的第一试题数据进行作答,第一试题数据包括10道题,答题进度设定的阈值为90%,应试者答完第9题后,客户端根据应试者答题进度信息和设定的阈值比较,应试者答题进度信息达到设定的阈值,客户端将结合结构数据信息对应试者下一试题数据的信息进行预测,根据下一试题数据的信息客户端主动向服务器请求第二试题数据。
步骤210:根据所述预设的展示策略展示所述第二试题数据,接收应试者的答题数据并缓存。
本说明书一实施例中,还包括:
当接收到应试者点击页面中上一页或下一页按钮时,根据所缓存的答题数据与对应试题的关联关系加载并展示对应页面的试题数据和答题数据。
本说明书一实施例中,还包括:
当检测到应试者重新输入当前页面的答题数据时,根据当前页面的修改或新增的答题数据及对应的试题序号对所缓存的答题数据进行更新。
本说明书一实施例中,在所述当检测到应试者重新输入当前页面的答题数据时,根据当前页面的修改或新增的答题数据及对应的试题序号对所缓存的答题数据进行更新之后还包括:
若当前页面的修改或新增的答题数据及对应的试题序号所在的缓存答题数据之前已上传至所述服务器,则仅将当前页面的修改或新增的答题数据及对应的试题序号上传至所述服务器。
步骤212:根据预设的上传策略将所缓存的答题数据以增量传输的方式上传至服务器。
本说明书一实施例中,所述预设的上传策略包括:
将设定数目道试题的答题数据分批上传或将答题数据按照设定字节数进行分批上传或将答题数据按照试题页码分批上传。
例如,在本说明书一实施例中,在线考试***进行一场数学考试,并且采用增量传输的方式提交答题数据,采用应试者每答完10道题,客户端自动将已经作答完的10道题的答题数据上传至服务器,服务端根据答题数据与对应试题的关联关系将10道题所对应的答题数据进行判断并缓存。
通过本发明实施例提供的在线考试方法,利用对试题数据的缓存和结构数据信息和答题进度信息相结合,实现了试题数据的预加载,降低了应试者在考试过程中所请求下一试题数据的响应时间,并且通过对试题数据和答题数据在客户端进行缓存,减少了对服务器的请求量,应试者的增量提交答题数据,避免了同一时刻大量用户提交试卷造成服务器负载过高情况,整体上提高了在线考试***的稳定性。
图3是示出了根据本说明书一个实施例的在线考试方法的流程图,该在线考试方法以对数学考试为例进行描述,该在线考试方法包括:
步骤302:获取数学试卷的结构数据信息。
在本说明书一实施例中,所述结构数据信息包括:
按照题目序号划分的结构数据信息或按照页码划分的结构数据信息或按照题型划分的结构数据信息。
例如,在本次数学考试中,共有30道题,按照每10道题划分的结构数据信息,当客户端获取结构数据信息时,获取到每10道题为一组的试题数据。
步骤304:根据所述结构数据信息获取第一试题数据。
在本说明书一实施例中,所述第一试题数据包括:
所述待开考试卷的一道试题或待开考试卷的一种题型的全部试题或待开考试卷的一页试题。
步骤306:将所述第一试题数据进行缓存,并根据预设的展示策略展示所述第一试题数据。
在本说明书一实施例中,所述预设的展示策略包括:
从所缓存的试题数据中提取设定数目道题向应试者展示或以分页展示的方式向应试者展示。
例如,在线考试***中进行一个数学考试,应试者通过所述的结构数据信息获取第一试题数据,在页面显示出一页试题或者一道试题或者填空题的全部试题。
步骤308:获取应试者的答题数据并进行缓存至客户端。
步骤310:根据答题进度信息和所述结构数据信息获取第二试题数据信息。
在本说明书一实施例中,所述答题进度信息通过以下方式获取:
所述答题进度信息通过获取所述第一试题数据的当前答题位置,根据所述当前答题位置在所述第一试题数据中的比例得到所述答题进度信息。
在本说明书一实施例中,所述将答题数据进行缓存包括:
根据答题数据与对应试题题目的关联关系对答题数据进行缓存。
在本说明书一实施例中,所述根据所述答题进度信息和结构数据信息向服务器请求第二试题数据包括:
判断所述第一试题数据的答题进度信息对应的比例是否达到设定的阈值;
当判断结果为达到设定的阈值时,获取所述结构数据信息中所述第一试题数据的下一试题数据的信息;
根据所述下一试题数据的信息向所述服务器请求第二试题数据。
步骤312:应试者更改答题数据,所缓存的答题数据与对应的试题的关联关系加载并展示对应页面的试题数据和答题数据,应试者重新输出当前页面的答题数据,根据当前页面的修改或新增的答题数据及对应的试题序号对所缓存的答题数据进行更新。
在本说明书一实施例中,当接收到应试者点击页面中上一页或下一页按钮时,根据所缓存的答题数据与对应试题的关联关系加载并展示对应页面的试题数据和答题数据。
在本说明书一实施例中,还包括:
当检测到应试者重新输入当前页面的答题数据时,根据当前页面的修改或新增的答题数据及对应的试题序号对所缓存的答题数据进行更新。
在本说明书一实施例中,在所述当检测到应试者重新输入当前页面的答题数据时,根据当前页面的修改或新增的答题数据及对应的试题序号对所缓存的答题数据进行更新之后还包括:
若当前页面的修改或新增的答题数据及对应的试题序号所在的缓存答题数据之前已上传至所述服务器,则仅将当前页面的修改或新增的答题数据及对应的试题序号上传至所述服务器。
步骤314:根据增量传输的方式将答题数据上传至服务端。
步骤316:将服务端的答题数据进行缓存。
步骤318:提交试卷至服务器。
在本说明书一实施例中,将设定数目道试题的答题数据分批上传或将答题数据按照设定字节数进行分批上传或将答题数据按照试题页码分批上传。
例如,在本说明书一实施例中,在线考试***进行一场数学考试,并且采用增量传输的方式提交答题数据,采用应试者每答完10道题,客户端自动将已经作答完的10道题的答题数据上传至服务器,服务端根据答题数据与对应试题的关联关系将10道题所对应的答题数据进行判断并缓存。
本说明书一实施例中,通过结构数据信息和答题进度信息的相结合,实现了对试题数据的提前获取,降低了应试者在考试过程中请求下一试题数据的等待时间,并且通过增量提交答题数据的方式,通过应试题的答题数据按照分批上传,减少统一上传答题数据的数据量,避免了在结束考试时刻统一提交答题数据服务器负载情况,提高了在线考试软件的稳定性。
图4是示出了根据本说明书一实施例的在线考试方法的流程图,包括步骤402至步骤408。
步骤402:通过考试加载对象监听后台发布的考试任务,当所述考试加载对象监听到后台发布第一考试任务时,将监听到的第一考试任务消息添加到消息队列。
一种实现方式中,在步骤402之后还包括:
根据客户端的请求,将待开考试卷(第一考试任务的试卷)的结构数据信息发送给客户端;
根据客户端基于所述结构数据信息生成的获取试卷的第一试题数据的请求,将所述第一试题数据发送给客户端;
根据客户端发送的基于应试者的答题进度信息和结构数据信息生成的第二试题数据的请求,将第二试题数据发送给客户端;
接收客户端基于预设的上传策略以增量传输的方式上传的答题数据。
本实施例根据客户端对试题数据的分批请求,将相应的试题数据给客户端,以及将客户端分批上传的答题数据进行存储,与一次性将试题数据发送给客户端及一次性接收客户端上传的答题数据相比,降低了服务器的瞬时压力,保证了服务器的平稳运行。
步骤404:通过所述协调者对象对所述消息队列中的消息进行循环处理,针对所述第一考试任务消息创建用以维护所述第一考试任务的考试报告状态的报告对象。
步骤406:通过所述考试加载对象监听所述第一考试任务的考试元数据是否发生改变,当监听到所述第一考试任务的考试元数据发生改变时,将所述第一考试任务的考试元数据的变化消息添加到所述消息队列。
步骤408:针对所述第一考试任务的考试元数据的变化消息,通过所述协调者对象通知所述报告对象重新维护所述第一考试任务的考试报告状态。
本说明书一实施例中,还包括:
当通过所述考试加载对象监听到所述第一考试任务考试结束时,将所述第一考试任务从所述考试加载对象中删除。
本说明书一实施例中,所述第一考试任务中每个应试者的考试报告状态包括:
考试未开始;
已进入考试,但考试未结束;
等待考试报告;
生成考试报告;
保存考试报告;
和/或发布考试报告。
本说明书一实施例中,所述第一考试任务中每个应试者的考试报告状态还包括:
批改试卷。
在本说明书一实施例中,通过所述协调者对象对第一考试任务的循环处理,并创建用以维护所述第一考试任务的考试报告状态的报告对象,所述考试报告用以记录每个应试者的考试成绩,和本次考试收卷率,通过所述考试加载对象监听所述第一考试任务的考试元数据是否发生改变,当监听到所述第一考试任务的考试元数据发生改变时,将所述第一考试任务的考试元数据的变化消息添加到所述消息队列;通过考试加载对象的对考试任务的监听,与协调对象对所述消息队列中消息的循环处理,可以做到快速收卷处理,并提高了收卷的成功率,同时针对所述第一考试任务的考试元数据的变化消息,通过所述协调者对象通知所述报告对象重新维护所述第一考试任务的考试报告状态,可以生成每个应试者的考试报告,使应试者可以直观的了解本次考试得分情况。
图5是示出了根据本说明书一个实施例的在线考试方法的流程图,该在线考试方法以对数学考试为例进行描述,该在线考试方法包括:
步骤502:考试加载对象监听后台发布的第一考试任务。
步骤504:更新考试加载对象。
在本说明书一实施例中,通过考试加载对象监听后台发布考试任务;
***通过一个协调者对象来监听考试加载对象,维护自身是否是领导者的状态,维护生成考试报告相关任务的报告对象的创建、摧毁。
步骤506:将监听到的第一考试任务消息添加到消息队列。
例如,在本说明书一实施例中,考试加载对象通过定时任务轮询检查是否有新建的考试任务,若有则考试加载对象监听到后发送消息,添加到消息队列;
步骤508:协调者对象对消息队列中的消息进行循环处理,针对所述第一考试任务消息创建用以维护所述第一考试任务的考试报告状态的报告对象。
步骤510:通过所述考试加载对象监听所述第一考试任务的考试元数据是否发生改变,当监听到所述第一考试任务的考试元数据发生改变时,将所述第一考试任务的考试元数据的变化消息添加到所述消息队列。
步骤512:针对所述第一考试任务的考试元数据的变化消息,通过所述协调者对象通知所述报告对象重新维护所述第一考试任务的考试报告状态。
例如,本说明书一实施例中,协调者对象的工作线程循环处理队列中的消息:
队列的消息要执行两类任务:一个是遍历还没有完成的考试任务,检查报告对象实例的创建和摧毁,报告对象维护分布式收卷的一系列状态机,另一个是检查模考的元数据是否发生改变,比如模考开始和结束时间,则通知报告对象重新维护考试任务的的状态;
报告对象以Actor模式维护收卷过程的状态;
当通过所述考试加载对象监听到所述第一考试任务考试结束时,将所述第一考试任务从所述考试加载对象中删除。
步骤514:生成考试报告。
在本说明书一实施例中,所述第一考试任务中每个应试者的考试报告状态包括:
考试未开始;
已进入考试,但考试未结束;
等待考试报告;
生成考试报告;
保存考试报告;
和/或发布考试报告。
在本说明书一实施例中,所述第一考试任务中每个应试者的考试报告状态还包括:
批改试卷。
例如,本说明书一实施例中,考试任务中考试报告状态包括:
NOT STARTED:考试未开始,进入开始之前;
EXAMING:已经进入考试,考试结束后进入到WAITING FOR REPORT;
在WAITING FOR REPORT:进行初始化用jamUserReport;
SETTING JAM USER REPORT:初始化用户考试报告(jamId,urerId,exerciseId),分数与排名未生成;
考试需要批改,进入到GRADING JAM,完成批改后,接收到批改完成信息,进入CREATING JAM REPORT流程;
考试不需要修改,直接进入到CREATING JAM REPORT流程;
CREATING JAM REPORT:收卷,生成exerciseReport,jamReport,jamUserReport,并saveExerciseReport,并发布;
STATE PUBLISHING EXERCISE SUBMITTED MESSAG:将saveExerciseReport和发布exerciseSubmitted分离,减小发布压力;
STATE FINISH:考试结束,删除zk中的jamstat。
在本说明书一实施例中,所述收卷处理通过基于Actor模式的分布式收卷。
在本说明书一实施例中,所述Actor模式是一个概念模型,用于处理并发计算,***中的所有的对象都抽象成一个Actor:
Actor的输入是接收到的消息;
Actor接收到消息后处理消息中定义的任务;
Actor处理完成任务后可以发送消息给其他的Actor。
Actors之间只有发送消息这一种通信方式,Actor通过异步消息沟通,在处理消息之前消息被存放在Mailbox中,消息让Actor之间解耦。Actors的一个重要特征在于Actors之间相互隔离,它们并不互相共享内存,也就是说,一个Actor能维持一个私有的状态,并且这个状态不可能被另一个Actor所改变。Actor模型内部的状态由自己的行为维护,外部线程不能直接调用对象的行为,必须通过消息才能激发行为,这样就保证Actor内部数据只有被自己修改。
在本说明书一实施例中,通过所述协调者对象对第一考试任务的循环处理,并创建用以维护所述第一考试任务的考试报告状态的报告对象,所述考试报告用以记录每个应试者的考试成绩,和本次考试收卷率,通过所述考试加载对象监听所述第一考试任务的考试元数据是否发生改变,当监听到所述第一考试任务的考试元数据发生改变时,将所述第一考试任务的考试元数据的变化消息添加到所述消息队列;通过考试加载对象的对考试任务的监听,与协调对象对所述消息队列中消息的循环处理,可以做到快速收卷处理,并提高了收卷的成功率,同时针对所述第一考试任务的考试元数据的变化消息,通过所述协调者对象通知所述报告对象重新维护所述第一考试任务的考试报告状态,可以生成每个应试者的考试报告,使应试者可以直观的了解本次考试得分情况,并且基于Actor模式的收卷处理,在收卷的流程里则可以计算应试者的试卷得分,并统一发布考试得分,同时生成每位应试者的考试报告,缩短了应试者等待成绩时间。
与上述方法实施例相对应,本说明书还提供了在线考试装置实施例,图6示出了本说明说一个实施例的在线考试装置的模块图。如图6所示,该装置600包括:
获取模块602:被配置为获取待开考试卷的结构数据信息;
展示模块604:被配置为根据所述结构数据信息获取试卷的第一试题数据,缓存所述第一试题数据并根据预设的展示策略展示所述第一试题数据;
答题模块606:被配置为获取应试者的答题数据和所述答题进度信息,将答题数据进行缓存;
所述获取模块还被配置为根据所述答题进度信息和结构数据信息向服务器请求第二试题数据,接收并缓存所述第二试题数据;
所述展示模块还被配置为根据所述预设的展示策略展示所述第二试题数据;
所述答题模块还被配置为接收应试者的答题数据并缓存;
上传模块608:被配置为根据预设的上传策略将所缓存的答题数据以增量传输的方式上传至服务器。
一个可选的实施例中,所述结构数据信息包括:
按照题目序号划分的结构数据信息或按照页码划分的结构数据信息或按照题型划分的结构数据信息。
一个可选的实施例中,所述第一试题数据包括:
所述待开考试卷的一道试题或待开考试卷的一种题型的全部试题或待开考试卷的一页试题。
一个可选的实施例中,所述预设的展示策略包括:
从所缓存的试题数据中提取设定数目道题向应试者展示或以分页展示的方式向应试者展示。
一个可选的实施例中,所述答题模块进一步被配置为:
获取所述第一试题数据的当前答题位置,根据所述当前答题位置在所述第一试题数据中的比例得到所述答题进度信息。
一个可选的实施例中,所述答题模块进一步被配置为:
根据答题数据与对应试题题目的关联关系对答题数据进行缓存。
一个可选的实施例中,所述获取模块包括:
判断单元:被配置为判断所述第一试题数据的答题进度信息对应的比例是否达到设定的阈值;
结构信息获取单元:被配置为当判断结果为达到设定的阈值时,获取所述结构数据信息中所述第一试题数据的下一试题数据的信息;
请求单元:被配置为根据所述下一试题数据的信息向所述服务器请求第二试题数据。
一个可选的实施例中,所述展示模块进一步被配置为:
当接收到应试者点击页面中上一页或下一页按钮时,根据所缓存的答题数据与对应试题的关联关系加载并展示对应页面的试题数据和答题数据。
一个可选的实施例中,所述答题模块进一步被配置为:
当检测到应试者重新输入当前页面的答题数据时,根据当前页面的修改或新增的答题数据及对应的试题序号对所缓存的答题数据进行更新。
一个可选的实施例中,所述上传模块进一步被配置为:
若当前页面的修改或新增的答题数据及对应的试题序号所在的缓存答题数据之前已上传至所述服务器,则仅将当前页面的修改或新增的答题数据及对应的试题序号上传至所述服务器。
一个可选的实施例中,所述预设的上传策略包括:
将设定数目道试题的答题数据分批上传或将答题数据按照设定字节数进行分批上传或将答题数据按照试题页码分批上传。
与上述方法实施例相对应,本说明书还提供了在线考试装置实施例,图7示出了本说明说一个实施例的在线考试装置的模块图。如图7所示,该装置700包括:
监听模块702:被配置为通过考试加载对象监听后台发布的考试任务,当所述考试加载对象监听到后台发布第一考试任务时,将监听到的第一考试任务消息添加到消息队列;
创建模块704:被配置为通过所述协调者对象对所述消息队列中的消息进行循环处理,针对所述第一考试任务消息创建用以维护所述第一考试任务的考试报告状态的报告对象;
添加模块706:被配置为通过所述考试加载对象监听所述第一考试任务的考试元数据是否发生改变,当监听到所述第一考试任务的考试元数据发生改变时,将所述第一考试任务的考试元数据的变化消息添加到所述消息队列;
维护模块708:被配置为针对所述第一考试任务的考试元数据的变化消息,通过所述协调者对象通知所述报告对象重新维护所述第一考试任务的考试报告状态。
一个可选的实施例中,所述创建模块进一步被配置为:
当通过所述考试加载对象监听到所述第一考试任务考试结束时,将所述第一考试任务从所述考试加载对象中删除。
一个可选的实施例中,所述第一考试任务中每个应试者的考试报告状态包括:
考试未开始;
已进入考试,但考试未结束;
等待考试报告;
生成考试报告;
保存考试报告;
和/或发布考试报告。
一个可选的实施例中,所述创建模块进一步被配置为:
批改试卷。
本说明书一实施例中还提供一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述的在线考试方法的步骤。
本说明书一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现所述在线考试方法的步骤。
上述为本实施例的一种计算机可读存储介质的示意性方案需要说明的是,该存储介质的技术方案与上述的在线考试方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述在线考试方法的技术方案的描述。
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本说明书并不受所描述的动作顺序的限制,因为依据本说明书,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本说明书所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上公开的本说明书优选实施例只是用于帮助阐述本说明书。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本说明书的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本说明书。本说明书仅受权利要求书及其全部范围和等效物的限制。