陸軍 邵旭明
摘 要:突發天氣對地鐵運營會造成較大危害與財產損失。通過人工巡查天氣預警信息的方式存在效率低下問題。
為解決該問題,從實際需求出發,設計了基于Node.js的天氣監測告警系統。該系統可實時監測關注城市的突發天氣預警信息。系統基于B/S微服務架構,采用Node.js全棧技術,數據庫使用Sqlite。該系統可顯著提升地鐵運營人員獲取突發天氣預警信息的效率,提早做好應對行動,最大程度地降低突發天氣帶給地鐵運營的損失。
關鍵詞:Nodejs;Sqlite;B/S
引言
當前,國內的地鐵建設正處于大規模發展階段,地鐵線路越來越多地采用高架與地面形式,同時氣象對地鐵的影響也是日趨顯著。氣象災害防范已是地鐵運營急需關注的問題[1]。地鐵運營公司一般由控制中心(以下簡稱OCC)接收到突發天氣預警信息后,向各個部門或中心發布突發天氣預警信息,現場各崗位按照突發天氣下的相關作業標準和要求執行。目前,無錫地鐵的OCC是通過江蘇省氣象局網站來獲取突發天氣預警信息,這一環節需要依靠人員不斷地通過手動刷新與肉眼觀察的手段來監測氣象局網站的動態信息。這樣的方式不僅效率低下,大量浪費人員的精力,而且容易發生信息遺漏的問題。為解決這個問題,本文設計了一種基于Node.js技術的天氣監測告警系統的解決方案。該系統通過后臺以固定的時間間隔來循環讀取氣象局網站指定地址的信息,并將信息過濾,只留下有價值的關注城市與關注時間的突發天氣預警信息。系統將突發天氣預警信息寫入數據庫,同時瀏覽器自動打開并指向天氣監測告警系統,天氣監測告警系統的前端界面發出語音圖文提示,提醒系統用戶及時關注突發天氣預警信息。
1 系統架構
系統架構采用當下流行的B/S架構與Node.js全棧技術。用戶通過使用Webkit為核心的瀏覽器使用軟件系統。同時采用微服務架構的理念,根據實際需求,將業務劃分為獨立數據共享型的自治服務,可以融合不同種類與不同時期的技術。B/S架構相對于C/S架構的優勢是不需要對所有客戶端單獨進行部署與升級,它的部署與升級都集中在服務端。B/S架構可顯著降低系統維護的人力與時間成本。
2 相關技術
2.1 框架技術Node.js
Node.js是一個基于 Chrome V8 引擎的 JavaScript 運行環境。Node.js使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。Node.js的包管理器 npm,是全球最大的開源庫生態系統[1]。
2.2數據庫技術Sqlite
SQLite 是輕型的嵌入式數據庫。它是一款自給自足的、無服務器的、零配置的、事務性的SQL數據庫引擎。它的優勢是資源占用少、性能良好和零管理成本。目前SQLite是在世界上最廣泛部署的SQL數據庫引擎 [4]。
2.3響應式Web設計Bootstrap
Bootstrap由Twitter的設計師Mark Otto和Jacob Thornton合作開發,是目前最流行的前端框架之一。Bootstrap是基于 HTML、CSS、JavaScript設計,簡潔靈活的特點可以使 Web開發更加快捷[4]。
3 系統設計
3.1 系統流程設計
預警信息可分為三類,正在預警中數目,有效預警與已解除預警。正在預警中數目代表有效預警的實時數目。有效預警是預警記錄的實時清單,清單中的預警記錄處于有效狀態。一旦預警無效,則從有效預警的清單中撤出,并放入已解除預警的清單。已解除預警是已解除狀態預警記錄的清單。
在Node.js系統服務端啟動后,首先執行初始模塊。初始模塊會第一次讀取正在預警中數目、有效預警與已解除預警這三類信息。接下來執行循環模塊,循環模塊會以固定的周期讀取正在預警中數目。如果該數目沒有變化,則不做任何操作。如果該數目發生變化,則讀取有效預警與已解除預警的清單,然后從清單中對城市與時間進行過濾,將過濾后的信息寫入數據庫。同時執行Http模塊,瀏覽器將自動指向天氣監測告警系統的前端頁面。前端頁面通過語音圖文來提醒系統用戶關注突發天氣預警信息。
3.2 系統功能模塊
系統功能模塊可分為三個,初始模塊、循環模塊、Http模塊、日志模塊與數據庫模塊。系統功能的模塊結構圖如圖1所示。
圖1 模塊結構圖
3.2.1 初始模塊
初始模塊在系統服務端啟動后執行一次。初始模塊使用cheerio類庫加載指定三個URL地址的HTML字符串,URL地址分別指向正在預警中數目、有效預警與已解除預警的頁面。其中正在預警中數目可直接獲取。有效預警需設定關注城市,只獲取關注城市的預警信息。已解除預警需設定關注城市與當下時刻,只獲取關注城市與當下時刻的預警信息,其中當下時刻精確到分鐘。初始模塊取得這三類預警信息后將其存放至全局變量,以供循環模塊比對。同時通過日志模塊將信息存儲到日志中。
3.2.2 循環模塊
初始模塊執行完畢后,開始執行循環模塊。循環模塊以固定的周期間隔讀取正在預警中數目,同時將當前讀取的數目與上一次讀取的數目進行比對,判斷是否一致。如果數目無變化,則只通過日志模塊寫入日志,不做其他任何操作。如果前后數目不一致,則讀取有效預警與已解除預警的HTML字符串。根據設定的關注城市與當下時刻的條件進行過濾,過濾后的信息是我們想要得到的預警信息。通過日志模塊與數據庫模塊將其分別寫入日志與數據庫Sqlite。數目不一致的情況也將觸發Http模塊。
3.2.3 Http模塊
Http模塊使用RESTful的架構風格,通過不同的GET或者POST請求方法,將請求引導至對應的頁面并渲染其內容。如果請求是index,則引導并渲染頁面index.html。如果請求是warnlist,則引導并渲染頁面warnlist.html。Http模塊的前端使用Bootstrap技術,其主要包含兩種功能,控制面板與預警記錄??刂泼姘灏俗钚乱淮晤A警的時間、數量、語音、有效預警與已解除預警的清單。預警記錄包含了所有預警記錄,并可以快捷搜索。Http模塊可以通過兩種方式觸發執行。這兩種方式是循環模塊判斷數目不一致與用戶通過瀏覽器主動訪問Http模塊。
3.2.4 日志模塊
日志模塊將預警記錄信息寫入日志中,日志文件以擴展名log結尾,一個月對應一個日志文件,下一個月的月初建立并使用新的日志文件。日志文件記錄了歷史信息,可方便追溯過往發生的信息,也可以同數據庫互為參考依據。一般情況下日志模塊被初始模塊與循環模塊所調用。
3.2.5 數據庫模塊
數據庫模塊將預警信息寫入輕型嵌入式數據庫Sqlite。預警信息的字段主要是時間、數量、有效預警與已解除預警。由于有效預警與已解除預警所包含的信息可能一次包含兩個城市或兩個城市以上的預警信息,所以這兩個字段最適合使用數據庫的JSON技術。使用Sqlite的函數方法JSON_OBJECT將鍵值字符串轉換JSON對象,使用Sqlite的函數方法JSON_ARRAY將多個JSON對象轉換為JSON數組。一般情況下數據庫模塊被循環模塊所調用。
4 結論
突發天氣諸如臺風、暴雨、雷電、大霧、冰雹等都可能會對地鐵運營的設備與人員造成危害。通過天氣監測告警系統,可實現全自動地監測地鐵運營公司所在城市的突發天氣預警信息。該系統幫助地鐵運營人員更早地獲取預警信息,更快地做出應對突發天氣的方案與行動。自動化的監測系統不僅顯著提升地鐵運營人員的獲取突發天氣預警信息的效率,而且可以最大程度地降低突發天氣對地鐵運營產生的損失。同時它也可以成為當下地鐵智慧運營理念的有機組成部分。
參考文獻
[1]李毅雄. 香港地鐵氣象災害防范技術[J]. 中國安全生產科學技術, 2007, 3(2).
[2]Node.js Foundation. Nodejs Documentation [EB/OL]. [2019-08-05]. https://nodejs.org/en/docs.
[3]SQLite Consortium. SQLite Documentation [EB/OL]. [2019-08-05]. https://sqlite.org/about.html.
[4]Mark Otto. Bootstrap Documentation [EB/OL]. [2019-08-05]. https://getbootstrap.com/docs/4.3/getting-started/introduction.