李敏盛
(廣西廣播電視無線傳播樞紐臺)
本文設計了一個安播信息顯示系統,該系統能使各臺站與地市分管中心可實時看到安全播出的計時信息和管理中心下發的安播通知;能更好的提高安播信息發布效率與臺站值班人員的安全播出意識。
本系統主要分為三部分,服務端、客戶端和LED屏系統。
1.服務端:部署在總監控中心的云服務器虛擬出的 Centos 7系統中,服務端應用使用開源的dotnet core跨平臺框架,C#語言編寫,打包成docker鏡像,運行于docker開源容器應用引擎中。服務端數據使用Mysql數據庫進行存儲。

圖1
2.客戶端:部署在樹莓派raspberry pi 3b+嵌入式系統中,操作系統是樹莓派自帶的Raspbian系統。客戶端應用也采用開源的dotnet core跨平臺框架,C#語言編寫,打包成支持linux-arm平臺的程序,客戶端使用SQLite數據庫。SQLite是無服務器事務輕量級SQL數據庫引擎,其內存占用少、運行可靠型、使用前不需要設置、不依賴其他,非常適合嵌入式系統使用。
3.LED屏:選擇了一款可二次開發,且支持TCP/IP通訊的LED屏。屏幕顯示三行內容,第一行實時顯示當前年月日時分秒,第二行顯示臺站和分管中心各自的安全播出計時信息,第三行顯示管理中心下發安播通知。
圖1為系統架構圖。
1.客戶端與服務端的通訊采用開源框架zeroc ice,該框架支持多語言(C++、.NET、Java、Python、Object-C、Ruby、PHP、JavaScript等)之間的PRC高性能互通,支持跨平臺調用,該框架還提供了SSL插件,保證網絡通訊的安全。本系統使用其SSL插件進行加密通訊,服務端和客戶端都需安裝安全證書方可相互通訊。兩者的互相連接和心跳檢測都交由ICE框架處理。
2.客戶端與LED屏的通訊:客戶端啟動時,就會調用LED屏已封裝好的通訊模塊函數,如果不成功,每隔10秒后,再次進行連接,直到連接成功。后每隔30秒進行心跳檢測。
1.服務端設計
服務端采用ASP.Net Core來創建,分成兩塊大功能,一是WEB服務,二是后臺偵測處理服務。
WEB服務大致分為3個模塊功能:一是臺站信息的導入導出;二是重置各臺站的安播起始日,也就是安播屏第二行的“自XXXX年XX月XX日”這個日期;三是添加修改通知內容,也就是LED屏的第三行內容。它采用ASP.NET Core Razor Pages來創建頁面,Razor 頁面是 ASP.NET Core MVC 的一個新特性,它使基于頁面的編碼方式更簡單高效。WEB服務的身份認證使用IdentityServer身份認證服務框架,它是將規范兼容的OpenID Connect和OAuth 2.0端點添加到任意ASP.Net Core應用程序的中間件。為了方便批量的數據導入導出,WEB服務使用了EPPlus開源控件,EPPlus是一個.NET庫,使用Office Open XML格式(xlsx)讀取和寫入Excel文件。EPPlus沒有.NET以外的依賴項。
后臺偵測服務的主要功能:根據操作者的要求,下發內容指令到相應的客戶端,并接收客戶端返回的結果,寫入數據庫中。后臺偵測服務在WEB服務啟動前,使用BackgroundWorker開辟一個新線程先行啟動,該服務會啟動ICE通訊框架的服務端,隨時接受客戶端的連接。然后其服務本身又啟動另外一個線程負責每隔10秒訪問數據庫,檢查是否有新內容要下發,當發現有新下發內容時,調用下發模塊進行處理。
WEB服務和后臺偵測服務都使用開源的NLog日志記錄平臺,將錯誤、告警和運行信息統一格式化打印在控制臺窗體上,并寫入日志記錄文件中。
服務端程序將打包成Docker鏡像,運行在Docker開源的容器引擎中,Docker容器引擎幾乎可以在任意平臺上運行,有啟動速度快,快速的交付和部署,更高效的虛擬化,更輕松的遷移和擴展等優點,為此服務端的數據庫也使用Mysql官方發布的Docker鏡像進行快速部署。
2.客戶端設計
客戶端的主要功能有:一是將現在時間實時發給LED屏第一行顯示,二是接收到服務端下發的重置安播時間指令后,跟當前時間進行比較后,計算出結果并組合文字后,發送給LED屏在第二行顯示,三是接收到服務端下發的通知指令后,立即發給LED屏顯示。LED屏無法同時接收多條指令,但客戶端卻有三個線程會同時發給LED屏,為了解決這個問題,客戶端創建了一個消息隊列,要下發給LED屏的指令先送給消息隊列,由消息隊列根據先進先出的規則,實時發送給LED屏。客戶端還有一個功能是將LED屏顯示成功與否的結果返回給服務端。客戶端的數據庫使用SQLite數據庫,它非常適用于嵌入式系統使用,用來存儲服務端下發的指令,當客戶端重啟時,優先讀取數據中內容進行顯示。
客戶端的日志系統也是使用NLog日志記錄平臺,將各種級別信息在控制臺窗口顯示和保存在文件里。
3.安全證書的制作
在一臺裝有Python的linux服務器上,通過pip install zeroc-icecertutils命令安裝ZeroC存儲庫的實用程序包,然后下載和運行ZeroC ICE官方的makedemocerts.py腳本,根據安裝提示生成服務端證書和客戶端證書。
證書生成完成后,分別將服務端證書和客戶端證書放入服務端和客戶端的根目錄下,并按圖2在ice配置文件中做好配置。

圖2
本系統的服務端和客戶端都使用.Net Core開源跨平臺框架,C#語言編寫,并使用Zero ICE開源通訊框架,并啟用了SSL,保證服務端和客戶端的加密通訊。該系統部署在全區各無線臺站和地市分管中心,實現實時顯示臺站、分管中心各自的安播計時信息和管理中心下發的安播通知,有效提高了職工的安全播出意識。