前言:想要寫出一篇引人入勝的文章?我們特意為您整理了Node.js的英語口語考試平臺探析范文,希望能給你帶來靈感和參考,敬請閱讀。
摘要:針對國內(nèi)高校英語口語考試形式過于單一且效率較低的問題,提出并設(shè)計了一種基于Node.js的英語口語考試平臺,在Node.js運(yùn)行環(huán)境下采用Node.Webkit兼容框架利用JavaScript進(jìn)行軟件開發(fā)。通過采集、編碼、緩存等環(huán)節(jié)對參試人員的音頻進(jìn)行處理,實(shí)現(xiàn)了在線口語考試的功能。測試結(jié)果表明,平臺運(yùn)行穩(wěn)定、抗壓能力強(qiáng),能夠大幅提高口語考試的效率,適用于在高校推廣應(yīng)用。
關(guān)鍵詞:Node.js;口語考試;Node.Webkit;編碼
0引言
當(dāng)前國內(nèi)高校英語口語考試的過程較為復(fù)雜,在人力、物力等方面都造成了一定程度的浪費(fèi)[1-3]。為此,本文提出并設(shè)計了一種基于Node.js的英語口語考試平臺,充分利用了Node.js在非瀏覽器應(yīng)用程序開發(fā)方面的通用性和Node.Webkit框架的多語言兼容性,利用JavaScript實(shí)現(xiàn)平臺的開發(fā),在具體應(yīng)用上,通過采集、編碼、緩存等多個環(huán)節(jié)處理學(xué)生的口語音頻,從而實(shí)現(xiàn)了英語口語考試的在線操作。
1平臺整體設(shè)計
1.1平臺功能設(shè)計
英語口語考試平臺的用戶為高校的教師和學(xué)生,因此平臺客戶端分為學(xué)生客戶端和教師客戶端兩種形式,分別用于學(xué)生錄制考試音頻和教師對其口語水平進(jìn)行評定。平臺基于Socket.io實(shí)現(xiàn)兩種客戶端之間的通信。平臺的核心功能是采集和處理學(xué)生參加口語考試的音頻數(shù)據(jù),其余則是一些教師客戶端管理功能,即查看用戶的登錄狀態(tài)、控制考試過程、試題管理、音頻管理等。在考試的過程中,首先由教師通過客戶端對當(dāng)次考試的試題進(jìn)行選定,然后每一臺監(jiān)考計算機(jī)在為考試所組建的局域網(wǎng)內(nèi)向所有考試計算機(jī)廣播自己的IP地址,參考學(xué)生能夠在考試計算機(jī)的平臺客戶端中查看到監(jiān)考計算機(jī)列表并進(jìn)行選擇,與其建立數(shù)據(jù)連接,當(dāng)有學(xué)生申請登錄和考試時,教師客戶端接收其請求,獲取批準(zhǔn)后學(xué)生測試考試用設(shè)備,如果沒有問題即可開始考試,學(xué)生用口語回答試題,由平臺全程錄制音頻。
1.2平臺技術(shù)架構(gòu)
由于口語考試并不是所有學(xué)生都同步進(jìn)行的,所以平臺充分利用了Node.js的異步特性,為每一項異步操作植入監(jiān)聽器,從而有效提高平臺的并發(fā)處理能力,因此本平臺利用Node.js的Soket.io技術(shù)實(shí)現(xiàn)通信功能。對于平臺的客戶端界面,為了滿足根據(jù)不同試題內(nèi)容進(jìn)行自適應(yīng)變化的需求,采用了響應(yīng)式漸進(jìn)框架Vue.js實(shí)現(xiàn)MVVM模式的客戶端界面。平臺具體的技術(shù)框架,如圖1所示。英語口語考試平臺在Vue.js的基礎(chǔ)上以組件化的方式進(jìn)行開發(fā),所有組件文件均為“.vue”的形式,每一個文件中都包括局部CSS代碼、Vue.js邏輯腳本和HTML模板[4]。這種開發(fā)方式實(shí)現(xiàn)了命名空間隔離、組件復(fù)用和松散耦合,無需對客戶端的每一種界面進(jìn)行單獨(dú)的開發(fā),進(jìn)行具體操作時只需將多個子組件進(jìn)行功能性的融合,從而避免了命名空間的污染。因此本平臺設(shè)計過程中將客戶端界面分解為多個子組件,并分別將WebSocket通信和音頻處理封裝成單獨(dú)的組件,利用Webpack進(jìn)行整體打包,從而在各種資源間建立組合關(guān)系并在有需求的情況下將其合并為執(zhí)行文件。
2平臺實(shí)現(xiàn)
2.1客戶端界面
組件分解的目的是簡化和分解客戶端界面結(jié)構(gòu),使功能與形式相同的組件能夠在組件引用的過程中重復(fù)使用。平臺客戶端的每一種界面都被分解為多個單獨(dú)的組件,如運(yùn)行進(jìn)度條、倒計時顯示模塊、試題標(biāo)題欄、用戶信息框等,從而將功能界面逐層分解。在進(jìn)行后臺程序開發(fā)的過程中,對應(yīng)每一個組件創(chuàng)建一個單獨(dú)的“.vue”文件,模塊樣式、JavaScript邏輯和DOM結(jié)構(gòu)全部包含于其中,組件間的通信利用Vue.js中的props接口進(jìn)行,以便在復(fù)合組件和各子組件之間傳遞參數(shù)。平臺設(shè)計過程中創(chuàng)建的所有組件都需要根據(jù)客戶端界面的不同結(jié)構(gòu)進(jìn)行分類,并將復(fù)合組件及其引用的各個子組件按界面的層級進(jìn)行有序排列,即在代碼中建立對應(yīng)的引用關(guān)系。本平臺的組件文件基于ES6(ECMAScript6)語法進(jìn)行開發(fā),該語法支持import、export導(dǎo)入導(dǎo)出命令并以此支持各種組件的隨意組合。這種靜態(tài)編譯的方式能夠在代碼運(yùn)行之前就對所引用的模塊進(jìn)行編譯,相對于運(yùn)行過程中的加載具有更高的執(zhí)行效率。在平臺運(yùn)行的過程中,利用Webpack工具,從執(zhí)行第一個文件起逐層明確所需調(diào)用的資源,建立各組件的依賴關(guān)系,將需要組合的組件統(tǒng)一封裝到JavaScript文件中。平臺客戶端需要在不同的計算機(jī)顯示器上都能夠正常顯示,程序運(yùn)行過程中Node-Webkit從package.json配置文件中讀取客戶端界面的窗口分辨率等參數(shù)信息,從而能夠?qū)Ψ直媛蔬M(jìn)行設(shè)置,與顯示器的分辨率進(jìn)行匹配,以此來保證界面的正常顯示。所有子組件中都完成了CSS3的flex屬性設(shè)置,集成了的flex屬性值的子元素能夠按既定的規(guī)則進(jìn)行排列以實(shí)現(xiàn)界面的縮放,由此便可構(gòu)建客戶端的自適應(yīng)界面。
2.2網(wǎng)絡(luò)通信
英語口語考試過程中的考試機(jī)與監(jiān)考機(jī)連接、試題下載、答題音頻上傳等環(huán)節(jié)都要依靠考試局域網(wǎng)的通信進(jìn)行,本平臺基于Socket.io對上述操作請求進(jìn)行注冊和監(jiān)聽,實(shí)現(xiàn)考試過程中的通信功能[5]。Socket.io是利用WebSocket技術(shù)構(gòu)建而成的信息庫,其所建立的連接必須通過準(zhǔn)確的IP地址實(shí)現(xiàn),因而學(xué)生客戶端需要在雷達(dá)嗅探的模式下搜索教師客戶端以完成考試。教師客戶端在考試局域網(wǎng)內(nèi)基于UDP通信方式廣播其所在監(jiān)考機(jī)的IP地址,學(xué)生客戶端搜索到這些地址并選擇其中一個進(jìn)行連接,在這個過程中,通過Node.js中udp4和dgram模塊的調(diào)用,學(xué)生客戶端可以隨時監(jiān)聽教師客戶端的廣播信息,基于回調(diào)函數(shù)將接收到的IP地址緩存到全局?jǐn)?shù)組中,此時Node.js的connect啟動與學(xué)生所選擇的IP地址建立WebSocket連接,與此同時,Socket.io向其余的監(jiān)考機(jī)發(fā)出信號,中斷它們與已建立連接的考試機(jī)的通信。學(xué)生客戶端與教師客戶端建立連接后進(jìn)入考試界面,教師客戶端能夠顯示所有參加當(dāng)次考試的學(xué)生信息,學(xué)生登錄的同時其客戶端向教師客戶端發(fā)出Socket.io中的login請求,該請求的信息中包含testId等變量,教師客戶端接收到該請求后將其中的ID信息與參考人員信息進(jìn)行比對,若存在相同信息則允許學(xué)生登錄并開始考試。英語口語考試試題中包含兩部分內(nèi)容,聽力試題的音頻及其所對應(yīng)的圖文信息。聽力試題的音頻以HTTP地址的形式發(fā)送給參考的學(xué)生由其在線收聽,由此來簡化考試過程,降低平臺的運(yùn)行壓力,圖文內(nèi)容則由包含HTML模板的組件提供。除此之外,還要向?qū)W生發(fā)送包含試卷名稱、題目數(shù)量、題目ID、答題時間等考試信息的.json文件。學(xué)生完成答題后,為了保證答題音頻的完整性,平臺首先將其以base64保存在考試機(jī)的answer.json文件中,然后再將這些編碼導(dǎo)入全局?jǐn)?shù)組,同時向教師客戶端發(fā)送file_to_teacher請求,得到回應(yīng)后音頻將被分別上傳至監(jiān)考機(jī)中。
2.3音頻處理
平臺采集到學(xué)生答題的語音信號后,需要將其傳遞給Lame.js以完成MP3音頻的編碼,為了避免編碼過程中的主線程阻塞,平臺采用WebWokers子線程來保證編碼的效率。編碼前需要將采集到的語音模擬信號進(jìn)行預(yù)處理,將原始信號數(shù)據(jù)進(jìn)行壓縮并將其轉(zhuǎn)換為PCM數(shù)字信號。音頻編碼的具體實(shí)現(xiàn)過程為:(1)基于importScrips的方式將Lame.js注入到WebWokers中,選擇聲道數(shù)、比特率、采樣率等參數(shù)完成初始化,構(gòu)建Lame編碼器;(2)利用緩沖器方法先將冗余數(shù)據(jù)存放在數(shù)組對象中,編碼完成后即清除;(3)采用convert方法對數(shù)據(jù)進(jìn)行壓縮和轉(zhuǎn)換,設(shè)定信號壓縮比后在模擬信號中搜索與壓縮比相同的值,通過持續(xù)的取反操作使數(shù)據(jù)間隔均為整數(shù)值,然后將32位浮點(diǎn)數(shù)據(jù)壓縮成16位整形數(shù)據(jù),以控制振幅值的方式去除壓縮數(shù)據(jù)中的噪聲,由此得到16位的PCM數(shù)字信號;(4)調(diào)用編碼函數(shù)處理接收到的encode編碼信號,將獲取的聲道依次發(fā)送到所構(gòu)建Lame.js的MP3Encoder中,完成編碼并將其存儲與緩沖區(qū);(5)將緩沖區(qū)中的數(shù)據(jù)全部發(fā)送給主線程。平臺將音頻處理模塊的邏輯封裝為一個類庫,即具有全局性質(zhì)的Recorder類,創(chuàng)建這個類時需要在其中集成包含比特率、聲道數(shù)、緩沖區(qū)空間等信息的options配置項,在確認(rèn)對象和方法具有一定的兼容性后可根據(jù)具體的邏輯輸出為布爾型的support變量[6]。為了滿足封裝要求,Recorder類中包括以下幾種接口:(1)int(初始化)接口,由得到的support變量判斷設(shè)備與平臺的兼容性,接下來從WebWokers中調(diào)用錄音轉(zhuǎn)碼腳本,然后利用worker對象引入監(jiān)聽函數(shù)并用以接收初始化函數(shù);(2)start(開始錄音)接口,連接成功后持續(xù)監(jiān)聽process事件,利用回調(diào)函數(shù)獲取不同聲道的數(shù)據(jù)并發(fā)送給WebWokers腳本;(3)pause(暫停錄音)接口,中止執(zhí)行音頻采集代碼,保存現(xiàn)有數(shù)據(jù);(4)resume(恢復(fù)錄音)接口,繼續(xù)錄音并添加到原數(shù)據(jù)中;(5)stop(停止錄音)接口,關(guān)閉音頻采集設(shè)備,終止WebWokers轉(zhuǎn)碼。
3平臺應(yīng)用測試
3.1平臺性能測試
為了對平臺的性能與工作可靠性進(jìn)行驗證,在華北理工大學(xué)對本平臺進(jìn)行試運(yùn)行,邀請該校建筑工程學(xué)院大二年級的275名學(xué)生使用本平臺參加英語口語模擬考試。學(xué)院機(jī)房共配備60臺計算機(jī),包含4種不同型號,其主要硬件配置如表1所示。英語口語模擬考試共分為5個批次進(jìn)行,每批次參考學(xué)生數(shù)量為55人??荚囘^程完全按照高校的口語考試流程進(jìn)行,機(jī)房中每個型號的計算機(jī)均安裝了本平臺的測試客戶端。每個批次的學(xué)生使用不同的口語考試試題,準(zhǔn)備工作完畢后,監(jiān)考教師通過教師客戶端對當(dāng)次考試的試題進(jìn)行選定,然后監(jiān)考計算開始向所有考試計算機(jī)廣播自己的IP地址,參考學(xué)生通過考試計算機(jī)中安裝的學(xué)生客戶端查看監(jiān)考計算機(jī)列表并進(jìn)行選擇,與其建立數(shù)據(jù)連接并申請開始考試,教師客戶端接收其請求并批準(zhǔn),學(xué)生用口語回答試題,由平臺全程錄制音頻。在考試過程中分別記錄了客戶端運(yùn)行時每種配置的計算機(jī)的資源占用情況,具體資源占用數(shù)據(jù),如圖2所示。由圖2可見,不同配置的計算機(jī)在平臺運(yùn)行過程中的資源占用率各不相同,4種配置條件下CPU占用率均低于25%,內(nèi)存占用率均低于45%,且CPU主頻和內(nèi)存頻率越高,資源占用率越小。分別通過單線程和多線程的方式進(jìn)行答題錄音,研究不同線程條件下錄音時長與MP3文件生成時間的對應(yīng)關(guān)系。測試結(jié)果可知,線程數(shù)量不同的條件下,錄音時長與MP3生成時間均成正比例關(guān)系,但相較于單線程錄音,采用多線程錄音時MP3的生成延時可減少50ms。
3.2平臺壓力測試
在口語考試并發(fā)用戶數(shù)量較多的情況下,平臺的數(shù)據(jù)吞吐量較大,此時平臺程序是否能夠穩(wěn)定運(yùn)行,平臺功能能否正常實(shí)現(xiàn)決定了平臺是否具備投入使用的條件。采用Web-SocketBench作為壓力測試工具,測試過程中將Socket連接的數(shù)量從0逐步增加到1000,發(fā)送不同類型、不同大小的數(shù)據(jù)以模擬不同的參試人員數(shù)量和試題內(nèi)容,最終得到的發(fā)送成功率數(shù)據(jù),如圖3所示。由圖3可見,連接到平臺的用戶數(shù)量越多(超過500個時),發(fā)送的數(shù)據(jù)越大(超過10MB時),消息發(fā)送的成功率會有所降低,但在實(shí)際應(yīng)用中,考試學(xué)生數(shù)量和所生成的音頻文件幾乎不會超過這兩個數(shù)值,在此條件下發(fā)送消息的成功率能夠達(dá)到100%且測試過程中未出現(xiàn)宕機(jī)和程序中止運(yùn)行的情況,可見平臺能夠滿足當(dāng)前高校教學(xué)過程中的英語口語考試需求。
4總結(jié)
當(dāng)前多數(shù)國內(nèi)高校的英語口語考試仍以傳統(tǒng)的方式進(jìn)行,對有限的教學(xué)資源造成了較大的浪費(fèi),為此,本文提出并設(shè)計了一種基于Node.js的英語口語考試平臺,介紹了平臺的功能結(jié)構(gòu)和技術(shù)架構(gòu),分別闡述了客戶端界面、網(wǎng)絡(luò)通信模塊、音頻處理模塊的設(shè)計思路,并對平臺的性能和抗壓性進(jìn)行了測試。測試結(jié)果表明,本文所設(shè)計的平臺功能完善、抗壓能力強(qiáng),對于高校的英語口語考試具有很強(qiáng)的實(shí)用性。
作者:顏娟 單位:西安交通工程學(xué)院