呂海東(大連理工大學 城市學院,遼寧 大連 116600)
基于Vert.x的實時Web監控系統
呂海東(大連理工大學城市學院,遼寧大連116600)
創新性地使用最新的Vert.x框架,利用其異步、非阻塞、實時性、高并發的工作模式,對現有的工業過程監控系統進行全面改造,極大提升了系統的響應速度,實時性得到顯著提高,完全滿足大量客戶端并發的實時請求。
Vert.x;過程監控;PLC;數據推送
工業生產監控系統的Web化[1]已成為標準,客戶端只使用瀏覽器即可實現對監控數據的實時顯示,不需要安裝各種監控組件,簡化了監控系統維護。實現監控數據的實時傳輸和顯示技術也在不斷地出現,從傳統HTTP請求/響應模式,到AJAX的Comet及HTML5的WebSocket,采用數據推送技術,使得Web監控系統的實時性得到極大提高。然而監控服務器在面對大量客戶連接的并發請求時,實時性難以滿足。無論JavaEE,還是NET都如此,它們的多線程工作模式是根源所在。為解決此問題,Vert.x框架[2-3]應運而生,它采用全新工作模式,特別適合開發實時性要求極高的系統。
Vert.x是用于下一代異步、可伸縮、并發應用的框架,輕量級的高性能JVM應用平臺,適合開發各種移動及企業應用。它徹底解決了業界遭遇C10K問題,即當并發連接超過一萬以上時,傳統技術會引發暫停。以Tomcat為例,它在超過100個并發長請求就堵塞,而Vert.x可支持超10萬個并發請求。
本文采用Vert.x對現有的供熱監控系統進行改造,對監控服務器端和客戶端進行重構。在服務器端使用Vert.x的Web服務器取代現有Tomcat7,采用Vert.xTCP讀取西門子PLC300的監控數據。用戶端采用Vert.x的Event Bus Bridge技術,實時接收服務器端監控數據,改造后的監控系統的性能和響應速度比原有系統有顯著的提高。
Vert.x核心采用與Node.js相同的事件驅動的異步工作模式,使用單線程的事件循環機制實現高并發的請求處理,而不像傳統的服務器采用多線程的模式。
Vert.x的核心組件是Verticle,運行在Vert.x實例中。Vert.x啟動后,根據服務器CPU的內核數,自動創建對應的Vert.x實例,并發運行Verticle。
Vert.x采用事件驅動的異步編程模式,通過觸發事件以及注冊事件處理器完成所有編程任務。Verticle之間不能直接調用,只能發送和接收事件實現協作。
Vert.x的核心是事件總線,Verticle在事件總線發送和接收事件。事件總線是分布式的,能連接服務器和客戶端。事件總線支持點對點和發布-訂閱模式的事件傳輸,監控系統中服務器向所有連接的客戶端發送監控數據就使用發布訂閱模式,使得所有客戶端瀏覽器都能實時接收到監控數據。
大連柳樹供熱公司監控系統現場采用西門子PLCS7-300[4],通過屏蔽雙絞線連接到中心機房的核心交換機上,中心監控主機CPU采用志強8核服務器,可并發運行8個Vert.x實例,能支持十幾萬個并發請求。頁面采用最新的Bootstrap模版技術[5],自動適應不同尺寸的屏幕顯示,包括手機、平板等。
2.1讀取PLC監控數據TCP編程
西門子S7-300采用TCP FETCH WRITE通信方式[6],該模式下通過TCP協議的Socket,主機可與PLC進行數據交換。
Vert.x內置TCP Client方法,如下是 TCP客戶端讀取PLC數據的代碼:


客戶端定時發送數據指令,PLC數據到達后,Socket上的事件監聽器工作,從回調函數中取得監控數據,并轉換為JSON格式,使用總線方法publish發布事件。總線上監聽的Web客戶端都能同步接收監控數據。Vert.x采用推模式實現數據傳輸,由Vert.x服務器主動發送數據,不需客戶端請求,節省了網絡帶寬,提高了傳輸速度,滿足了監控系統實時性。監控系統的總體架構如圖1所示。

圖1 供熱監控系統總體架構圖
在 Vert.x服務器中,可啟動多個TCP客戶端Verticle,實現多路監測數據的并發讀取,如下代碼展示主服務器依次啟動 Http Web Server和TCP Client監控Verticle等實例。

2.2監控Web服務器的編程
系統采用Vert.x的服務器模塊web-server~2.0,實現功能強大的Web服務器,并使用異步模式接收客戶端瀏覽器的HTTP請求,支持客戶高并發的HTTP連接請求,示意代碼如下。

Vert.x通過deployModule載入Web模塊,Web模塊自動將目錄/web作為站點發布目錄,在/web目錄中存儲站點的頁面文件。
代碼中bridge:true表示將服務器端的事件總線延伸到Web客戶端,實現服務器和客戶端的數據傳輸。每個Verticle都可以在Event Bus注冊事件處理器,以此實現數據的接收和發送。
2.3監控客戶端編程
客戶端使用普通的HTML即可,不需要動態頁面。為實現與Vert.x服務器的Event Bus通信,客戶端頁面需要引入Vert.x的 Event Bus Bridge的庫文件 vertxbus-2.1.js。
監控數據顯示使用<div>,使用Bootstrap框架布局,將<div>懸浮在圖片指定位置。監控客戶端頁面的數據接收和顯示代碼如下:

代碼中關鍵是取得Vert.x的Event Bus對象,通過事件總線提供的vertx.EventBus,使用Javascript創建一個實例即可。如果與服務端的Event Bus連接成功,則eb.onopen回調函數工作。在此方法內,通過Event Bus的registerHandler對指定的地址進行監聽,當有此地址的事件event到達時,定義的回調函數function(args)開始運行,參數args為事件中包含的JSON數據,解析出JSON數據,使用jQuery的函數html()將數據顯示在指定的<div>元素內,實現監控數據的實時顯示。實時監控系統監控界面如圖2所示。
Real-time Web based monitoring system based on Vert.x
Lv Haidong
(City Institute,Dalian University of Technology,Dalian 116600,China)
This paper uses the innovative new Vert.x framework,which has the characters such as asynchronous,non blocking,real-time and highly concurrent,to improve the existing industrial process monitoring and control system.The response speed of the system is greatly enhanced,the real-time is greatly improved,and the real time request of a large number of clieats concurrency is completely satisfied.
Vert.x;SCADA;PLC;data pushing
TP274
A
1674-7720(2015)12-0080-02