公务员期刊网 论文中心 正文

Node.js的英语口语考试平台探析

前言:想要写出一篇引人入胜的文章?我们特意为您整理了Node.js的英语口语考试平台探析范文,希望能给你带来灵感和参考,敬请阅读。

Node.js的英语口语考试平台探析

摘要:针对国内高校英语口语考试形式过于单一且效率较低的问题,提出并设计了一种基于Node.js的英语口语考试平台,在Node.js运行环境下采用Node.Webkit兼容框架利用JavaScript进行软件开发。通过采集、编码、缓存等环节对参试人员的音频进行处理,实现了在线口语考试的功能。测试结果表明,平台运行稳定、抗压能力强,能够大幅提高口语考试的效率,适用于在高校推广应用。

关键词:Node.js;口语考试;Node.Webkit;编码

0引言

当前国内高校英语口语考试的过程较为复杂,在人力、物力等方面都造成了一定程度的浪费[1-3]。为此,本文提出并设计了一种基于Node.js的英语口语考试平台,充分利用了Node.js在非浏览器应用程序开发方面的通用性和Node.Webkit框架的多语言兼容性,利用JavaScript实现平台的开发,在具体应用上,通过采集、编码、缓存等多个环节处理学生的口语音频,从而实现了英语口语考试的在线操作。

1平台整体设计

1.1平台功能设计

英语口语考试平台的用户为高校的教师和学生,因此平台客户端分为学生客户端和教师客户端两种形式,分别用于学生录制考试音频和教师对其口语水平进行评定。平台基于Socket.io实现两种客户端之间的通信。平台的核心功能是采集和处理学生参加口语考试的音频数据,其余则是一些教师客户端管理功能,即查看用户的登录状态、控制考试过程、试题管理、音频管理等。在考试的过程中,首先由教师通过客户端对当次考试的试题进行选定,然后每一台监考计算机在为考试所组建的局域网内向所有考试计算机广播自己的IP地址,参考学生能够在考试计算机的平台客户端中查看到监考计算机列表并进行选择,与其建立数据连接,当有学生申请登录和考试时,教师客户端接收其请求,获取批准后学生测试考试用设备,如果没有问题即可开始考试,学生用口语回答试题,由平台全程录制音频。

1.2平台技术架构

由于口语考试并不是所有学生都同步进行的,所以平台充分利用了Node.js的异步特性,为每一项异步操作植入监听器,从而有效提高平台的并发处理能力,因此本平台利用Node.js的Soket.io技术实现通信功能。对于平台的客户端界面,为了满足根据不同试题内容进行自适应变化的需求,采用了响应式渐进框架Vue.js实现MVVM模式的客户端界面。平台具体的技术框架,如图1所示。英语口语考试平台在Vue.js的基础上以组件化的方式进行开发,所有组件文件均为“.vue”的形式,每一个文件中都包括局部CSS代码、Vue.js逻辑脚本和HTML模板[4]。这种开发方式实现了命名空间隔离、组件复用和松散耦合,无需对客户端的每一种界面进行单独的开发,进行具体操作时只需将多个子组件进行功能性的融合,从而避免了命名空间的污染。因此本平台设计过程中将客户端界面分解为多个子组件,并分别将WebSocket通信和音频处理封装成单独的组件,利用Webpack进行整体打包,从而在各种资源间建立组合关系并在有需求的情况下将其合并为执行文件。

2平台实现

2.1客户端界面

组件分解的目的是简化和分解客户端界面结构,使功能与形式相同的组件能够在组件引用的过程中重复使用。平台客户端的每一种界面都被分解为多个单独的组件,如运行进度条、倒计时显示模块、试题标题栏、用户信息框等,从而将功能界面逐层分解。在进行后台程序开发的过程中,对应每一个组件创建一个单独的“.vue”文件,模块样式、JavaScript逻辑和DOM结构全部包含于其中,组件间的通信利用Vue.js中的props接口进行,以便在复合组件和各子组件之间传递参数。平台设计过程中创建的所有组件都需要根据客户端界面的不同结构进行分类,并将复合组件及其引用的各个子组件按界面的层级进行有序排列,即在代码中建立对应的引用关系。本平台的组件文件基于ES6(ECMAScript6)语法进行开发,该语法支持import、export导入导出命令并以此支持各种组件的随意组合。这种静态编译的方式能够在代码运行之前就对所引用的模块进行编译,相对于运行过程中的加载具有更高的执行效率。在平台运行的过程中,利用Webpack工具,从执行第一个文件起逐层明确所需调用的资源,建立各组件的依赖关系,将需要组合的组件统一封装到JavaScript文件中。平台客户端需要在不同的计算机显示器上都能够正常显示,程序运行过程中Node-Webkit从package.json配置文件中读取客户端界面的窗口分辨率等参数信息,从而能够对分辨率进行设置,与显示器的分辨率进行匹配,以此来保证界面的正常显示。所有子组件中都完成了CSS3的flex属性设置,集成了的flex属性值的子元素能够按既定的规则进行排列以实现界面的缩放,由此便可构建客户端的自适应界面。

2.2网络通信

英语口语考试过程中的考试机与监考机连接、试题下载、答题音频上传等环节都要依靠考试局域网的通信进行,本平台基于Socket.io对上述操作请求进行注册和监听,实现考试过程中的通信功能[5]。Socket.io是利用WebSocket技术构建而成的信息库,其所建立的连接必须通过准确的IP地址实现,因而学生客户端需要在雷达嗅探的模式下搜索教师客户端以完成考试。教师客户端在考试局域网内基于UDP通信方式广播其所在监考机的IP地址,学生客户端搜索到这些地址并选择其中一个进行连接,在这个过程中,通过Node.js中udp4和dgram模块的调用,学生客户端可以随时监听教师客户端的广播信息,基于回调函数将接收到的IP地址缓存到全局数组中,此时Node.js的connect启动与学生所选择的IP地址建立WebSocket连接,与此同时,Socket.io向其余的监考机发出信号,中断它们与已建立连接的考试机的通信。学生客户端与教师客户端建立连接后进入考试界面,教师客户端能够显示所有参加当次考试的学生信息,学生登录的同时其客户端向教师客户端发出Socket.io中的login请求,该请求的信息中包含testId等变量,教师客户端接收到该请求后将其中的ID信息与参考人员信息进行比对,若存在相同信息则允许学生登录并开始考试。英语口语考试试题中包含两部分内容,听力试题的音频及其所对应的图文信息。听力试题的音频以HTTP地址的形式发送给参考的学生由其在线收听,由此来简化考试过程,降低平台的运行压力,图文内容则由包含HTML模板的组件提供。除此之外,还要向学生发送包含试卷名称、题目数量、题目ID、答题时间等考试信息的.json文件。学生完成答题后,为了保证答题音频的完整性,平台首先将其以base64保存在考试机的answer.json文件中,然后再将这些编码导入全局数组,同时向教师客户端发送file_to_teacher请求,得到回应后音频将被分别上传至监考机中。

2.3音频处理

平台采集到学生答题的语音信号后,需要将其传递给Lame.js以完成MP3音频的编码,为了避免编码过程中的主线程阻塞,平台采用WebWokers子线程来保证编码的效率。编码前需要将采集到的语音模拟信号进行预处理,将原始信号数据进行压缩并将其转换为PCM数字信号。音频编码的具体实现过程为:(1)基于importScrips的方式将Lame.js注入到WebWokers中,选择声道数、比特率、采样率等参数完成初始化,构建Lame编码器;(2)利用缓冲器方法先将冗余数据存放在数组对象中,编码完成后即清除;(3)采用convert方法对数据进行压缩和转换,设定信号压缩比后在模拟信号中搜索与压缩比相同的值,通过持续的取反操作使数据间隔均为整数值,然后将32位浮点数据压缩成16位整形数据,以控制振幅值的方式去除压缩数据中的噪声,由此得到16位的PCM数字信号;(4)调用编码函数处理接收到的encode编码信号,将获取的声道依次发送到所构建Lame.js的MP3Encoder中,完成编码并将其存储与缓冲区;(5)将缓冲区中的数据全部发送给主线程。平台将音频处理模块的逻辑封装为一个类库,即具有全局性质的Recorder类,创建这个类时需要在其中集成包含比特率、声道数、缓冲区空间等信息的options配置项,在确认对象和方法具有一定的兼容性后可根据具体的逻辑输出为布尔型的support变量[6]。为了满足封装要求,Recorder类中包括以下几种接口:(1)int(初始化)接口,由得到的support变量判断设备与平台的兼容性,接下来从WebWokers中调用录音转码脚本,然后利用worker对象引入监听函数并用以接收初始化函数;(2)start(开始录音)接口,连接成功后持续监听process事件,利用回调函数获取不同声道的数据并发送给WebWokers脚本;(3)pause(暂停录音)接口,中止执行音频采集代码,保存现有数据;(4)resume(恢复录音)接口,继续录音并添加到原数据中;(5)stop(停止录音)接口,关闭音频采集设备,终止WebWokers转码。

3平台应用测试

3.1平台性能测试

为了对平台的性能与工作可靠性进行验证,在华北理工大学对本平台进行试运行,邀请该校建筑工程学院大二年级的275名学生使用本平台参加英语口语模拟考试。学院机房共配备60台计算机,包含4种不同型号,其主要硬件配置如表1所示。英语口语模拟考试共分为5个批次进行,每批次参考学生数量为55人。考试过程完全按照高校的口语考试流程进行,机房中每个型号的计算机均安装了本平台的测试客户端。每个批次的学生使用不同的口语考试试题,准备工作完毕后,监考教师通过教师客户端对当次考试的试题进行选定,然后监考计算开始向所有考试计算机广播自己的IP地址,参考学生通过考试计算机中安装的学生客户端查看监考计算机列表并进行选择,与其建立数据连接并申请开始考试,教师客户端接收其请求并批准,学生用口语回答试题,由平台全程录制音频。在考试过程中分别记录了客户端运行时每种配置的计算机的资源占用情况,具体资源占用数据,如图2所示。由图2可见,不同配置的计算机在平台运行过程中的资源占用率各不相同,4种配置条件下CPU占用率均低于25%,内存占用率均低于45%,且CPU主频和内存频率越高,资源占用率越小。分别通过单线程和多线程的方式进行答题录音,研究不同线程条件下录音时长与MP3文件生成时间的对应关系。测试结果可知,线程数量不同的条件下,录音时长与MP3生成时间均成正比例关系,但相较于单线程录音,采用多线程录音时MP3的生成延时可减少50ms。

3.2平台压力测试

在口语考试并发用户数量较多的情况下,平台的数据吞吐量较大,此时平台程序是否能够稳定运行,平台功能能否正常实现决定了平台是否具备投入使用的条件。采用Web-SocketBench作为压力测试工具,测试过程中将Socket连接的数量从0逐步增加到1000,发送不同类型、不同大小的数据以模拟不同的参试人员数量和试题内容,最终得到的发送成功率数据,如图3所示。由图3可见,连接到平台的用户数量越多(超过500个时),发送的数据越大(超过10MB时),消息发送的成功率会有所降低,但在实际应用中,考试学生数量和所生成的音频文件几乎不会超过这两个数值,在此条件下发送消息的成功率能够达到100%且测试过程中未出现宕机和程序中止运行的情况,可见平台能够满足当前高校教学过程中的英语口语考试需求。

4总结

当前多数国内高校的英语口语考试仍以传统的方式进行,对有限的教学资源造成了较大的浪费,为此,本文提出并设计了一种基于Node.js的英语口语考试平台,介绍了平台的功能结构和技术架构,分别阐述了客户端界面、网络通信模块、音频处理模块的设计思路,并对平台的性能和抗压性进行了测试。测试结果表明,本文所设计的平台功能完善、抗压能力强,对于高校的英语口语考试具有很强的实用性。

作者:颜娟 单位:西安交通工程学院