袁世龍 李旭芳 嚴天立



摘 要 近年來,隨著互聯(lián)網(wǎng)技術(shù)與移動端技術(shù)的高速發(fā)展,Android因為其在移動端上擁有格外的優(yōu)勢,更有利于構(gòu)建“互聯(lián)網(wǎng)+”的問題解決方案。利用Android平臺開發(fā)“互聯(lián)網(wǎng)+選座”的選座解決方案,可以優(yōu)化或解決高校對于自習、考研學習、課程答疑,向?qū)W生分配座位,管理座位等問題。該系統(tǒng)采用Android(Java)客戶端 + Java套接字服務器 + I/O文件數(shù)據(jù)存儲 + Java 套接字管理客戶端,構(gòu)成系統(tǒng)。旨在快速實現(xiàn)平臺搭建,并滿足相關(guān)管理需求。
關(guān)鍵詞 Android Java Socket 高校選座 選座App
中圖分類號:TP311文獻標識碼:A
1背景
當前,在各大高校,為達到各種目的而分配的座位已成為一種重要的教育資源。雖然座位作為基本單位,但是承載的功能多種多樣,可能是考研學生的自習座位,可能是一般學生的自習座位,也有可能是老師進行答疑的答疑座位等。因為多種多樣的功能目的,同時教室的分配又具有較高的靈活性,在空間與時間上都會發(fā)生變化,所以相關(guān)座位的管理就成為了一大問題。然而,隨著互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,高校對于自習教室的管理,可以借助互聯(lián)網(wǎng)技術(shù)進行優(yōu)化與解決。同時在教室選座這一問題上,用戶靈活性高且管理對象變更速度快,因此Android移動端平臺搭建可以說是最適合用于解決此類問題。
2需求分析
2.1功能需求
基于系統(tǒng)要實現(xiàn)的最終目標,我們整理得到以下幾種基本功能需求:(1)能夠區(qū)分、標識用戶所在學校,并且能夠?qū)τ脩魝€體進行通知與識別;(2)能夠從系統(tǒng)中獲取座位實時信息,并通過Android端的app進行展示;(3)能夠?qū)淌易慌c相關(guān)資源提供足夠的信息來幫助用戶參考、選座;(4)能夠?qū)⒔淌一蜃坏耐ㄖ⒆兏畔⒓磿r發(fā)送給用戶,避免造成管理上的問題。(5)用戶能通過一定的排序,來對可選教室進行過濾篩選,并且可以通過搜索、收藏與查看選座記錄的方式對特定教室加以區(qū)別和搜索,方便再次選座和指定目標的選座。(6)能夠按照學校的相關(guān)規(guī)定對系統(tǒng)用戶的行為進行一定的約束或監(jiān)督,以便管理。
2.2用戶群體
我們把用戶群體進行一定的分類:
(1)一般用戶:
①學生:進行選座與被管理的用戶對象。
②答疑老師:通過發(fā)送消息來通知學生用戶前往對應教室進行答疑的用戶對象。
(2)管理用戶:
①教室管理人員:可以前往教室、對教室內(nèi)的資源進行維護并對違規(guī)行為進行管理的用戶對象。②系統(tǒng)管理人員:對系統(tǒng)的Android端、服務器端和管理客戶端進行軟件維護與數(shù)據(jù)維護的用戶對象。
2.3性能需求分析
(1)突發(fā)性高并發(fā):用戶對于系統(tǒng)的訪問多為周期性的高并發(fā)訪問,而在多數(shù)期間屬于靜息期。高并發(fā)周期取決于校園的晚自習安排、下課后學生自習安排、節(jié)假日自習安排、老師答疑安排等等。并發(fā)峰值基于學校的人數(shù)決定,經(jīng)調(diào)研系統(tǒng)最少需要支持500-700人的峰值并發(fā)使用。
(2)個體用戶持續(xù)的TCP請求:用戶App在線時為了能夠及時刷新用戶界面內(nèi)容,定時會向服務器請求獲取班級信息。因此,當人在線人數(shù)增加時,TCP并發(fā)量會成倍增加。這需要服務器對于高并發(fā)訪問有著更高的性能。
3系統(tǒng)結(jié)構(gòu)與系統(tǒng)設計
安卓客戶端與Java服務端互相通過基于TCP/IP協(xié)議的Socket通訊,獲取Android客戶端所需的相關(guān)信息、用戶信息與管理信息、用戶端上傳的密碼修改、手機綁定與選組等操作信息。Socket通訊的內(nèi)容采用JSON格式進行交付。客戶端與服務端之間通過“對象->JSON文本->對象”的模式進行信息傳遞。
Android客戶端搭載了SQLite數(shù)據(jù)庫對相關(guān)數(shù)據(jù)進行存儲。Java服務端采用Java語言原生的文本I/O流對數(shù)據(jù)進行讀取、存儲。客戶端負責將得到的信息展現(xiàn)在用戶面前,給用戶提供選座的參考信息與通知等功能。Java服務端提供數(shù)據(jù)的匯總、處理與反饋等功能。Java管理客戶端則負責管理用戶中系統(tǒng)管理人員與教室管理人員對教室相關(guān)信息的變更、違規(guī)懲罰以及信息通知等內(nèi)容發(fā)送給服務器,用于更新教室信息。
4系統(tǒng)實現(xiàn)
4.1客戶端界面設計
Android客戶端基于Androidx,API 21(Android5.0),OpenJDK8開發(fā),開發(fā)環(huán)境Android Studio3.5.3。客戶端內(nèi)的數(shù)據(jù)為SQLite(Room庫支持)。客戶端大致結(jié)構(gòu)與控件使用:
4.2 SQLite數(shù)據(jù)庫設計
客戶端內(nèi)采用的Room數(shù)據(jù)庫抽象來對數(shù)據(jù)庫進行管理維護,并將數(shù)據(jù)交互的過程放置在其他線程來避免對主線程造成卡頓,從而影響用戶體驗。
4.2.1 Dao接口設計
定義interface注以注釋@Dao將該接口定義為Dao,以實現(xiàn)對數(shù)據(jù)庫的操作封裝,使得Java對象能夠抽象為特定表中的元組得以存儲。對Dao接口內(nèi)的抽象函數(shù)進行注釋以聲明數(shù)據(jù)庫操作。@Insert注釋方法為插入對象到表中。@Update注釋方法為以主鍵檢索表,更新對象到表中。@Delete注釋方法為以主鍵檢索表,將傳入方法的對象在表中找到并刪除。@Query()注釋可以寫入?yún)?shù),參數(shù)為SQL語句,對表進行特定的操作,并且注釋了該注釋的函數(shù)帶有返回值作為結(jié)果。客戶端中主要采用“@Query”獲取全表對象。
4.2.2 Entity 存儲類設計
能夠被Dao操作的Java對象是注以@Entiy的類,該類決定了數(shù)據(jù)庫中表的設計。類中變量決定表中的屬性名。注以@PrimaryKey(autoGenerate = true)的變量為主鍵,參數(shù)決定其為自動生成主鍵值,注以@ColumnInfo(name = "Column_name")的變量為設置該變量在數(shù)據(jù)庫表中的屬性名,而該屬性的存儲方式將與該變量的Java類型相同。
4.2.3 DataBase類設計
將類注釋以@Database聲明為DataBase類,其封裝了數(shù)據(jù)庫連接,作為一個對象方便訪問。設計時對該類采用了單例模式,以避免反復創(chuàng)建數(shù)據(jù)庫連接對象而產(chǎn)生的系統(tǒng)損耗或內(nèi)存泄露。
4.3服務端設計
服務端使用Java原生的I/O文本流與TCP Socket技術(shù)搭建。通過TCP連接輪詢實現(xiàn)等待TCP連接并響應。
5系統(tǒng)測試
5.1功能測試
(1)用戶自動創(chuàng)建測試。用戶首次登錄App直接創(chuàng)建默認賬號來進行登錄驗證。
(2)頁面跳轉(zhuǎn)測試。App端界面跳轉(zhuǎn)應該流暢、正確。各個界面是否有提供返回到上一界面的按鍵。檢測是否存在界面丟失而引發(fā)的空指針異常。
(3)檢查各個按鈕控件是否正常運行,功能完整,能夠準確向用戶表達其功能用途。
(4)檢測頁面數(shù)據(jù)是否正常,數(shù)據(jù)加載線程與UI線程通信是否正常。
(5)App端與服務器通信測試。
5.2性能測試用例設計
基于阿里云服務器,云服務監(jiān)控。以加快單客戶端TCP連接請求頻率模擬并發(fā)訪問。著重對服務器與客戶端之間的網(wǎng)絡情況:如服務器平均入網(wǎng)帶寬、服務器平均出網(wǎng)帶寬、TCP連接并發(fā)峰值,的測試。同時測試服務器的CPU平均使用率。
經(jīng)過測試,服務器在峰值并發(fā)達到700次訪問時運行平穩(wěn)。在最高并發(fā)數(shù)下Java虛擬機堆內(nèi)存穩(wěn)定在10Mb左右。
5.3測試結(jié)論
系統(tǒng)測試各項指標良好,對于突發(fā)性高并發(fā)訪問有較好的抗壓能力。服務器內(nèi)存運行情況持續(xù)、平穩(wěn)。CPU使用率較低,網(wǎng)絡帶寬要求低,服務器部署運行良好,客戶端接收情況良好。
6結(jié)論
隨著互聯(lián)網(wǎng)浪潮的來襲,互聯(lián)網(wǎng)技術(shù)結(jié)合移動端平臺給許多現(xiàn)實中的問題帶來了新的解決思路。通過實驗,可以看到本論文設計的校園選座APP能夠充分利用功能性座位這種教學資源,改善傳統(tǒng)的座位管理方式。并且該系統(tǒng)也擁有較好的可擴展性,可以擴充入物聯(lián)網(wǎng)技術(shù),大數(shù)據(jù)技術(shù)等,讓選座的紀律管理與安排效果更好。但該系統(tǒng)也有一定的缺點,比如Java服務端可以進行優(yōu)化,部署專業(yè)的Web服務器而不是Socket服務器,并且可以使用數(shù)據(jù)庫存儲相關(guān)信息,而不是IO文件流存儲。不過當前系統(tǒng)的數(shù)據(jù)關(guān)系性較低,并發(fā)量并不是非常大,所以采用IO文件流存儲會更加適合。
Android移動端平臺發(fā)展至今,由于其開源而擁有良好的生態(tài),用戶群體龐大,市場前景可觀。通過Android平臺解決各大高校對于座位教學資源的管理的各種問題,是一個較為可觀的方案。這將使得用戶能夠高效的尋找合適的位置,管理者也能夠精準的實施管理。
參考文獻
[1] 張紅霞.基于Java Socket的一個簡單Web服務器實現(xiàn)[J].電腦知識與技術(shù),2015,11(18):52-53.
[2] 陽暉.高校圖書館自習室管理存在的問題與對策[J].辦公室業(yè)務,2019(21):175-176.
[3] 王紅偉,吳坤芳.Android手機App程序中SQLite數(shù)據(jù)存儲應用[J].漯河職業(yè)技術(shù)學院學報,2018(05):30-32.
[4] 孫翠改.Android環(huán)境下主UI線程與子線程通信機制研究[J].數(shù)字技術(shù)與應用,2016(09):66-67
[5] 陳天超.單例設計模式研究[J].福建電腦,2016,32(08):14-15+20.
[6] 歐陽燊.Android Studio開發(fā)實戰(zhàn) 從零基礎(chǔ)到App上線(第2版)[M].北京:清華大學出版社,2018.