公務員期刊網(wǎng) 論文中心 正文

Node.js的英語口語考試平臺探析

前言:想要寫出一篇引人入勝的文章?我們特意為您整理了Node.js的英語口語考試平臺探析范文,希望能給你帶來靈感和參考,敬請閱讀。

Node.js的英語口語考試平臺探析

摘要:針對國內高校英語口語考試形式過于單一且效率較低的問題,提出并設計了一種基于Node.js的英語口語考試平臺,在Node.js運行環(huán)境下采用Node.Webkit兼容框架利用JavaScript進行軟件開發(fā)。通過采集、編碼、緩存等環(huán)節(jié)對參試人員的音頻進行處理,實現(xiàn)了在線口語考試的功能。測試結果表明,平臺運行穩(wěn)定、抗壓能力強,能夠大幅提高口語考試的效率,適用于在高校推廣應用。

關鍵詞:Node.js;口語考試;Node.Webkit;編碼

0引言

當前國內高校英語口語考試的過程較為復雜,在人力、物力等方面都造成了一定程度的浪費[1-3]。為此,本文提出并設計了一種基于Node.js的英語口語考試平臺,充分利用了Node.js在非瀏覽器應用程序開發(fā)方面的通用性和Node.Webkit框架的多語言兼容性,利用JavaScript實現(xiàn)平臺的開發(fā),在具體應用上,通過采集、編碼、緩存等多個環(huán)節(jié)處理學生的口語音頻,從而實現(xiàn)了英語口語考試的在線操作。

1平臺整體設計

1.1平臺功能設計

英語口語考試平臺的用戶為高校的教師和學生,因此平臺客戶端分為學生客戶端和教師客戶端兩種形式,分別用于學生錄制考試音頻和教師對其口語水平進行評定。平臺基于Socket.io實現(xiàn)兩種客戶端之間的通信。平臺的核心功能是采集和處理學生參加口語考試的音頻數(shù)據(jù),其余則是一些教師客戶端管理功能,即查看用戶的登錄狀態(tài)、控制考試過程、試題管理、音頻管理等。在考試的過程中,首先由教師通過客戶端對當次考試的試題進行選定,然后每一臺監(jiān)考計算機在為考試所組建的局域網(wǎng)內向所有考試計算機廣播自己的IP地址,參考學生能夠在考試計算機的平臺客戶端中查看到監(jiān)考計算機列表并進行選擇,與其建立數(shù)據(jù)連接,當有學生申請登錄和考試時,教師客戶端接收其請求,獲取批準后學生測試考試用設備,如果沒有問題即可開始考試,學生用口語回答試題,由平臺全程錄制音頻。

1.2平臺技術架構

由于口語考試并不是所有學生都同步進行的,所以平臺充分利用了Node.js的異步特性,為每一項異步操作植入監(jiān)聽器,從而有效提高平臺的并發(fā)處理能力,因此本平臺利用Node.js的Soket.io技術實現(xiàn)通信功能。對于平臺的客戶端界面,為了滿足根據(jù)不同試題內容進行自適應變化的需求,采用了響應式漸進框架Vue.js實現(xiàn)MVVM模式的客戶端界面。平臺具體的技術框架,如圖1所示。英語口語考試平臺在Vue.js的基礎上以組件化的方式進行開發(fā),所有組件文件均為“.vue”的形式,每一個文件中都包括局部CSS代碼、Vue.js邏輯腳本和HTML模板[4]。這種開發(fā)方式實現(xiàn)了命名空間隔離、組件復用和松散耦合,無需對客戶端的每一種界面進行單獨的開發(fā),進行具體操作時只需將多個子組件進行功能性的融合,從而避免了命名空間的污染。因此本平臺設計過程中將客戶端界面分解為多個子組件,并分別將WebSocket通信和音頻處理封裝成單獨的組件,利用Webpack進行整體打包,從而在各種資源間建立組合關系并在有需求的情況下將其合并為執(zhí)行文件。

2平臺實現(xiàn)

2.1客戶端界面

組件分解的目的是簡化和分解客戶端界面結構,使功能與形式相同的組件能夠在組件引用的過程中重復使用。平臺客戶端的每一種界面都被分解為多個單獨的組件,如運行進度條、倒計時顯示模塊、試題標題欄、用戶信息框等,從而將功能界面逐層分解。在進行后臺程序開發(fā)的過程中,對應每一個組件創(chuàng)建一個單獨的“.vue”文件,模塊樣式、JavaScript邏輯和DOM結構全部包含于其中,組件間的通信利用Vue.js中的props接口進行,以便在復合組件和各子組件之間傳遞參數(shù)。平臺設計過程中創(chuàng)建的所有組件都需要根據(jù)客戶端界面的不同結構進行分類,并將復合組件及其引用的各個子組件按界面的層級進行有序排列,即在代碼中建立對應的引用關系。本平臺的組件文件基于ES6(ECMAScript6)語法進行開發(fā),該語法支持import、export導入導出命令并以此支持各種組件的隨意組合。這種靜態(tài)編譯的方式能夠在代碼運行之前就對所引用的模塊進行編譯,相對于運行過程中的加載具有更高的執(zhí)行效率。在平臺運行的過程中,利用Webpack工具,從執(zhí)行第一個文件起逐層明確所需調用的資源,建立各組件的依賴關系,將需要組合的組件統(tǒng)一封裝到JavaScript文件中。平臺客戶端需要在不同的計算機顯示器上都能夠正常顯示,程序運行過程中Node-Webkit從package.json配置文件中讀取客戶端界面的窗口分辨率等參數(shù)信息,從而能夠對分辨率進行設置,與顯示器的分辨率進行匹配,以此來保證界面的正常顯示。所有子組件中都完成了CSS3的flex屬性設置,集成了的flex屬性值的子元素能夠按既定的規(guī)則進行排列以實現(xiàn)界面的縮放,由此便可構建客戶端的自適應界面。

2.2網(wǎng)絡通信

英語口語考試過程中的考試機與監(jiān)考機連接、試題下載、答題音頻上傳等環(huán)節(jié)都要依靠考試局域網(wǎng)的通信進行,本平臺基于Socket.io對上述操作請求進行注冊和監(jiān)聽,實現(xiàn)考試過程中的通信功能[5]。Socket.io是利用WebSocket技術構建而成的信息庫,其所建立的連接必須通過準確的IP地址實現(xiàn),因而學生客戶端需要在雷達嗅探的模式下搜索教師客戶端以完成考試。教師客戶端在考試局域網(wǎng)內基于UDP通信方式廣播其所在監(jiān)考機的IP地址,學生客戶端搜索到這些地址并選擇其中一個進行連接,在這個過程中,通過Node.js中udp4和dgram模塊的調用,學生客戶端可以隨時監(jiān)聽教師客戶端的廣播信息,基于回調函數(shù)將接收到的IP地址緩存到全局數(shù)組中,此時Node.js的connect啟動與學生所選擇的IP地址建立WebSocket連接,與此同時,Socket.io向其余的監(jiān)考機發(fā)出信號,中斷它們與已建立連接的考試機的通信。學生客戶端與教師客戶端建立連接后進入考試界面,教師客戶端能夠顯示所有參加當次考試的學生信息,學生登錄的同時其客戶端向教師客戶端發(fā)出Socket.io中的login請求,該請求的信息中包含testId等變量,教師客戶端接收到該請求后將其中的ID信息與參考人員信息進行比對,若存在相同信息則允許學生登錄并開始考試。英語口語考試試題中包含兩部分內容,聽力試題的音頻及其所對應的圖文信息。聽力試題的音頻以HTTP地址的形式發(fā)送給參考的學生由其在線收聽,由此來簡化考試過程,降低平臺的運行壓力,圖文內容則由包含HTML模板的組件提供。除此之外,還要向學生發(fā)送包含試卷名稱、題目數(shù)量、題目ID、答題時間等考試信息的.json文件。學生完成答題后,為了保證答題音頻的完整性,平臺首先將其以base64保存在考試機的answer.json文件中,然后再將這些編碼導入全局數(shù)組,同時向教師客戶端發(fā)送file_to_teacher請求,得到回應后音頻將被分別上傳至監(jiān)考機中。

2.3音頻處理

平臺采集到學生答題的語音信號后,需要將其傳遞給Lame.js以完成MP3音頻的編碼,為了避免編碼過程中的主線程阻塞,平臺采用WebWokers子線程來保證編碼的效率。編碼前需要將采集到的語音模擬信號進行預處理,將原始信號數(shù)據(jù)進行壓縮并將其轉換為PCM數(shù)字信號。音頻編碼的具體實現(xiàn)過程為:(1)基于importScrips的方式將Lame.js注入到WebWokers中,選擇聲道數(shù)、比特率、采樣率等參數(shù)完成初始化,構建Lame編碼器;(2)利用緩沖器方法先將冗余數(shù)據(jù)存放在數(shù)組對象中,編碼完成后即清除;(3)采用convert方法對數(shù)據(jù)進行壓縮和轉換,設定信號壓縮比后在模擬信號中搜索與壓縮比相同的值,通過持續(xù)的取反操作使數(shù)據(jù)間隔均為整數(shù)值,然后將32位浮點數(shù)據(jù)壓縮成16位整形數(shù)據(jù),以控制振幅值的方式去除壓縮數(shù)據(jù)中的噪聲,由此得到16位的PCM數(shù)字信號;(4)調用編碼函數(shù)處理接收到的encode編碼信號,將獲取的聲道依次發(fā)送到所構建Lame.js的MP3Encoder中,完成編碼并將其存儲與緩沖區(qū);(5)將緩沖區(qū)中的數(shù)據(jù)全部發(fā)送給主線程。平臺將音頻處理模塊的邏輯封裝為一個類庫,即具有全局性質的Recorder類,創(chuàng)建這個類時需要在其中集成包含比特率、聲道數(shù)、緩沖區(qū)空間等信息的options配置項,在確認對象和方法具有一定的兼容性后可根據(jù)具體的邏輯輸出為布爾型的support變量[6]。為了滿足封裝要求,Recorder類中包括以下幾種接口:(1)int(初始化)接口,由得到的support變量判斷設備與平臺的兼容性,接下來從WebWokers中調用錄音轉碼腳本,然后利用worker對象引入監(jiān)聽函數(shù)并用以接收初始化函數(shù);(2)start(開始錄音)接口,連接成功后持續(xù)監(jiān)聽process事件,利用回調函數(shù)獲取不同聲道的數(shù)據(jù)并發(fā)送給WebWokers腳本;(3)pause(暫停錄音)接口,中止執(zhí)行音頻采集代碼,保存現(xiàn)有數(shù)據(jù);(4)resume(恢復錄音)接口,繼續(xù)錄音并添加到原數(shù)據(jù)中;(5)stop(停止錄音)接口,關閉音頻采集設備,終止WebWokers轉碼。

3平臺應用測試

3.1平臺性能測試

為了對平臺的性能與工作可靠性進行驗證,在華北理工大學對本平臺進行試運行,邀請該校建筑工程學院大二年級的275名學生使用本平臺參加英語口語模擬考試。學院機房共配備60臺計算機,包含4種不同型號,其主要硬件配置如表1所示。英語口語模擬考試共分為5個批次進行,每批次參考學生數(shù)量為55人??荚囘^程完全按照高校的口語考試流程進行,機房中每個型號的計算機均安裝了本平臺的測試客戶端。每個批次的學生使用不同的口語考試試題,準備工作完畢后,監(jiān)考教師通過教師客戶端對當次考試的試題進行選定,然后監(jiān)考計算開始向所有考試計算機廣播自己的IP地址,參考學生通過考試計算機中安裝的學生客戶端查看監(jiān)考計算機列表并進行選擇,與其建立數(shù)據(jù)連接并申請開始考試,教師客戶端接收其請求并批準,學生用口語回答試題,由平臺全程錄制音頻。在考試過程中分別記錄了客戶端運行時每種配置的計算機的資源占用情況,具體資源占用數(shù)據(jù),如圖2所示。由圖2可見,不同配置的計算機在平臺運行過程中的資源占用率各不相同,4種配置條件下CPU占用率均低于25%,內存占用率均低于45%,且CPU主頻和內存頻率越高,資源占用率越小。分別通過單線程和多線程的方式進行答題錄音,研究不同線程條件下錄音時長與MP3文件生成時間的對應關系。測試結果可知,線程數(shù)量不同的條件下,錄音時長與MP3生成時間均成正比例關系,但相較于單線程錄音,采用多線程錄音時MP3的生成延時可減少50ms。

3.2平臺壓力測試

在口語考試并發(fā)用戶數(shù)量較多的情況下,平臺的數(shù)據(jù)吞吐量較大,此時平臺程序是否能夠穩(wěn)定運行,平臺功能能否正常實現(xiàn)決定了平臺是否具備投入使用的條件。采用Web-SocketBench作為壓力測試工具,測試過程中將Socket連接的數(shù)量從0逐步增加到1000,發(fā)送不同類型、不同大小的數(shù)據(jù)以模擬不同的參試人員數(shù)量和試題內容,最終得到的發(fā)送成功率數(shù)據(jù),如圖3所示。由圖3可見,連接到平臺的用戶數(shù)量越多(超過500個時),發(fā)送的數(shù)據(jù)越大(超過10MB時),消息發(fā)送的成功率會有所降低,但在實際應用中,考試學生數(shù)量和所生成的音頻文件幾乎不會超過這兩個數(shù)值,在此條件下發(fā)送消息的成功率能夠達到100%且測試過程中未出現(xiàn)宕機和程序中止運行的情況,可見平臺能夠滿足當前高校教學過程中的英語口語考試需求。

4總結

當前多數(shù)國內高校的英語口語考試仍以傳統(tǒng)的方式進行,對有限的教學資源造成了較大的浪費,為此,本文提出并設計了一種基于Node.js的英語口語考試平臺,介紹了平臺的功能結構和技術架構,分別闡述了客戶端界面、網(wǎng)絡通信模塊、音頻處理模塊的設計思路,并對平臺的性能和抗壓性進行了測試。測試結果表明,本文所設計的平臺功能完善、抗壓能力強,對于高校的英語口語考試具有很強的實用性。

作者:顏娟 單位:西安交通工程學院