999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

EAST即時通信系統①

2018-08-17 12:06:28肖炳甲袁旗平
計算機系統應用 2018年8期
關鍵詞:數據處理數據庫用戶

王 蘭,肖炳甲,袁旗平

1(中國科學院 合肥物質科學研究院,合肥 230031)2(中國科學技術大學,合肥 230026)

EAST(Experimental Advanced Superconductive Tokomak)是中科院等離子體物理研究所設計的一個環形長和極向場全超導的托卡馬克裝置[1],也是世界上第一個全超導核聚變實驗裝置,該裝置于2006年3月成功地進行了首次通電實驗.在EAST實驗中,會產生大量的診斷數據和數值計算數據[2],不同的科研人員對數據的需求不盡相同.因此,基于該實驗平臺產生的實驗數據,我們設計并實現了EAST即時通信系統,本文著重介紹該系統中訂閱/推送[3]功能的設計與實現.

1 研究背景

隨著互聯網的快速發展,即時通信早已成為繼Web和Email之后最主要的基礎應用之一.近年來,企業級即時通信具有很強的競爭力,很多企業和機構都選擇搭建內部即時通信系統來辦公,以此提高安全性和辦公效率.搭建企業內部的即時通信系統目前有三種較流行的方式,一是通過軟件服務商提供的即時通信云服務,比如融云、環信、網易云信等,這種方式的優點是技術成熟、部署快速、節省時間和人力成本,缺點是費用隨著功能的增加而增加,無法實現更深層次的功能定制,數據和服務存在一定的安全隱患;二是選擇專注于團隊辦公、提高辦公效率的成熟軟件,比如騰訊的TIM,阿里的釘釘,這種方式的優點是產品成熟且免費,功能十分齊全,但是對于研究機構來講,很多功能是冗余的,也無法對系統擁有完全的控制權;三是通過開源軟件來搭建內部即時通信系統,這種方式的優點是開源免費、可擴展性強,可以根據內部需求進行二次開發和功能定制,缺點是性能不如商業系統.

EAST是基于上世紀末托卡馬克最新成果而設計的,它的目標就是針對近堆芯等離子體穩態先進運行模式的科學和工程問題.在EAST托卡馬克實驗中產生的大量的實驗數據都直接或間接地存入MDSPlus數據庫[4]和二級庫中.在EAST放電實驗過程中,參與實驗的科研人員擅長的領域各不相同,對實驗數據的需求也不一樣,實驗過程中實驗人員需要實時地獲取實驗狀態、實驗結果并進行討論,以發現問題或制定下一步實驗方案.現有的基于Web的實驗數據分析與可視化系統WebScope[5]雖然提供了詳盡的實驗結果查看平臺,但卻需要用戶主動并有選擇地去獲取.針對這種情況,西南物理研究院提出了基于HL-2A實驗的即時通信系統BCOS,BCOS系統投入使用后取得了不錯的效果,鑒于此構建EAST即時通信系統也將具有重要的現實意義.通過選型調研和需求分析,EAST即時通信系統采用對開源軟件二次開發的方式進行搭建,這樣不僅可以節省人力物力,也更能專注核心功能的開發.經過多方面考慮,最終選擇基于Openfire+Spark框架[6],其中的訂閱/推送功能作為WebScope的擴展滿足了科研人員即時便捷地獲取實驗信息的需求.

2 系統介紹

2.1 系統介紹

EAST即時通信系統是在開源即時通信解決方案Openfire+Spark上進行二次開發搭建的,系統框架如圖1所示.

圖1 EAST即時通信系統框圖

系統主要由五個部分組成,分別是數據處理模塊、消息處理中心、目的數據庫、客戶端、Web網站.在EAST托卡馬克實驗過程中,外部采集系統采集實驗過程中產生的工程數據并存入MDSPlus數據庫中,實驗數據存儲完后MDSPlus將會觸發存儲完畢事件;數據處理模塊主要實現的功能是在監聽到MDSPlus數據庫每炮(聚變實驗放電一次)[1]實驗數據存儲完畢的事件后,根據當前炮號(每次實驗產生的數據以炮號為單位)獲取需要推送的數據進行處理打包后發送給消息處理中心;消息處理中心的功能是完成用戶間消息的轉發以及將數據處理模塊發送過來的消息進行相應地推送;目的數據庫是用來存放用戶信息、消息類別、用戶訂閱、歷史消息記錄等與用戶操作相關的表,數據處理模塊、消息處理中心、Web網站模塊通過各自的數據庫接口與目的數據庫交互,進行存取等操作;客戶端承擔著用戶操作接口的角色,用戶通過客戶端來使用系統的功能,與好友互發消息、共享文件,接收來自服務器的推送消息;Web網站為用戶提供個性化設置,用戶可以通過Web端個性化訂閱消息,設置個人信息,查找歷史消息,部分有權限的用戶還可以進行消息類別的增刪改操作.

2.2 框架介紹

EAST即時通信系統是在開源的即時通信系統解決方案Openfire+Spark的框架上進行開發搭建.

其中,Openfire是開源的、基于XMPP協議[7](可拓展通訊和表示協議)、采用JAVA語言開發的即時通信服務器,具有開源、穩定、高性能等優點,EAST即時通信系統開發初期選用Openfire服務器也是基于此考慮.此外,Openfire提供了內部組件與外部組件兩種開發方式:內部組件主要是以jar包的形式,能夠直接訪問和獲取Openfire上的資源,但是依賴于Openfire,不適合復雜的業務;外部組件則是一個獨立的應用程序,以TCP形式連接到Openfire進行通信.在EAST即時通信系統的開發過程中,數據處理模塊最終選擇的是外部組件開發形式,該種方式優點是應用程序獨立于Openfire不占用服務器的資源,適合處理復雜耗時的業務邏輯.數據處理模塊有大量的數據讀取和繪圖操作,因此,若采用內部組件開發的形式,會增加服務器的負擔,嚴重情況下,會造成服務器崩潰.Igniterealtime官網[8]提供了Openfire外部組件開發包whack,可以方便地進行外部組件開發.

Spark是一個開源的跨平臺的即時通信客戶端,具備單聊、群聊功能,支持文本、圖片消息,在EAST即時通信系統中Spark扮演著客戶端框架的角色,系統客戶端部分是基于Spark進行二次開發,在基本的通信模塊基礎上,增加了解析后臺推送系統推送的圖片消息模塊、電子白板、消息配置等功能以滿足實驗人員的需求,另外,對Spark的界面布局也進行了相應的調整并刪掉了部分多余的功能.

使用Openfire+Spark的框架構建內部即時通信系統不僅可以節約時間成本、金錢成本、獲得更穩定的服務,還能夠使開發者更專注于核心需求,開發出高可用性的即時通信軟件.

3 系統實現

3.1 系統流程

系統的消息訂閱/推送功能整體流程如圖2所示.一次完整的訂閱推送過程為:

(1)用戶在Web網站選擇要訂閱的消息,Web系統將用戶的訂閱操作保存到目的數據庫MySQL的用戶訂閱表useropt中;

(2)一炮實驗結束后,MDSPlus數據庫向數據處理模塊發送MdsplusCompleted事件;

(3)數據處理模塊監聽到事件后,從MDSPlus中獲取最新一炮的數據進行處理;

(4)數據處理模塊根據目的數據庫MySQL的用戶訂閱表useropt將處理后消息以及訂閱用戶JID(用戶唯一標識)打包成Message發送給消息處理中心Openfire;

(5)消息處理中心將消息推送給目標用戶.

客戶端接收到服務端推送的Message后,將其解析為文本或者圖片格式在推送面板進行顯示.若用戶不在線,服務器則將該推送消息暫時放入用戶的離線消息隊列OfflineQueue中,待用戶上線后,再推送給用戶.

圖2 系統流程圖

3.2 消息訂閱

在消息訂閱系統中,用戶通過與Web頁面的交互完成指定消息的訂閱,訂閱信息將提交至數據庫的用戶訂閱表useropt中保存,后臺推送根據此表對用戶進行目標推送.

EAST每炮的實驗數據都以信號量的形式保存在MDSPlus數據庫中,MDSPlus是一種脈沖驅動的數據庫系統,其數據以樹狀結構分層存儲,不同類型的實驗數據保存在不同的樹上[1],每個樹的節點對應相應存儲的信號量.整個實驗中的信號量數量非常龐大,因此我們選取部分來展示我們信號量的分類過程,信號量分類示意如圖3所示.我們比較關心的是pcs_east、efit_pcs、east樹上存儲的信號量,其中pcs_east樹上存儲的是與PCS相關的數據,efit_east樹上存儲的是efit計算數據,east樹上存儲的是采集到的EAST數據.信號量分類是按照MDSPlus樹來進行組織的,這樣更符合實驗人員的習慣,更方便地找到要訂閱的信號量.另外,當樹上的信號量太多的時候,我們進一步對信號量進行了分類,如圖3中的單匝環信號、快控電流、等離子體位形等,這樣的組織方式不僅能夠方便用戶,后臺數據庫的組織層次也更加清晰.最終訂閱頁面也是按照這種組織關系實現的.

圖3 信號量分類

本系統中消息訂閱系統的web網站我們采用了Tomcat+Mybatis+Spring+SpringMVC技術來進行實現.其中Tomcat作為應用服務器,運行JSP應用;Mybatis則作為數據庫訪問的框架,完成數據庫的交互部分;Spring和SpringMVC則用于封裝Web層的開發,以達到低耦合、高效易用的目的.

SpringMVC的前端控制器將用戶請求通過映射的方式,傳給頁面控制器進行處理;頁面控制器根據用戶的請求類型,通過調用mybatis實現的訪問接口,對數據庫進行對應的查詢、修改或刪除操作;在完成數據庫交互后,將得到的數據進行相應的整合與進一步的封裝,并對其指定視圖名;最后通過選定的視圖控制器對返回的數據進行渲染,將數據按需求的規格展示在頁面上,供用戶訪問與獲取.以消息訂閱頁面為例,勾選自己需要的消息后,checkbox的數據將映射到頁面控制器,通過判斷每個選項的選中值(true或者false),將選中的項目更新為SQL語句的參數,利用事先定義好的mybatis接口對數據庫的訂閱項進行更新,更新結束后,指定返回到訂閱頁面,并以tree結構展示更新后的訂閱結果.此外,整個工程通過Maven對依賴的jar包進行配置和管理,避免了繁瑣的依賴項導入.

數據庫我們使用MySQL來進行存儲,主要包括用戶信息和消息描述類信息.其中,與訂閱/推送相關的關鍵表有用戶訂閱表、signal類別表、signal描述表等,其中signal描述表和用戶訂閱表的結構如表1和表2所示.類別表之間通過外鍵約束實現級聯更新和刪除,類別表與signal描述表則使用了觸發器來進行級聯.此外,為了防止并發修改帶來的影響,我們采用了樂觀鎖機制對表的修改進行了版本控制,即增加了一個version字段,當修改時version與查詢到的version不同時,表示修改沖突,則放棄此次修改,否則修改成功.

表1 signal描述表

表2 用戶訂閱表

3.3 數據處理與推送

鑒于系統的擴展性,在設計消息類的時候將消息的共同行為和屬性抽象出來,設計MessageBase類作為消息類的父類,其它消息類都繼承這個類,再添加自己的屬性和方法,如圖4所示,其中SignalMessage類表示信號量類型的消息,EpicsMessage類表示EPICS相關的消息類型,這樣可以降低消息存儲與處理間的耦合性.

圖4 消息類設計

EAST即時通信的數據處理模塊采用Openfire外部組件開發形式,組件是獨立于服務器運行的,即組件的運行狀態不會影響Openfire服務器的運行,這也是采用組件進行二次開發的重要原因,一方面不占用服務器的資源來處理數據,另一方面組件不依賴于服務器,組件崩潰或者啟動/關閉都不需要對服務器采取進一步操作,確保了服務器的穩定性.

數據處理模塊的功能主要包括監聽源消息庫的新一炮存儲完畢的事件、從源消息庫中讀取數據、處理數據、轉發生成的Message.數據處理流程如圖5所示.

數據處理模塊主要由四個線程組成,監聽線程用于監聽MDSPlus數據庫是否有新炮號存儲完畢(當存儲完畢的時候會觸發MdsplusCompleted事件),當監聽到對應事件后,數據處理模塊的取數據、處理數據、發送消息操作即采用多線程機制以異步的方式進行,讀線程通過MDSip協議遠程訪問MDSPlus[1],從中讀取數據并放入數據阻塞隊列DataQueue;處理線程從DataQueue中取出數據進行繪圖處理,然后根據用戶訂閱表useropt將處理后的數據和訂閱用戶的JID打包成Message放入消息隊列MessageQueue;最后,發送線程從消息隊列里取出Message轉發給消息處理中心Openfire.整個過程是一個典型的生產者-消費者模式,讀線程是數據的生產者,處理線程是數據的消費者同時也是Message的生產者,發送線程是Message的消費者.其中,DataQueue和MessageQueue是通過Java阻塞隊列BlockingQueue實現,二者都是固定大小的阻塞隊列,當線程向隊列里存儲元素的時候,若隊列滿則線程阻塞直到隊列有空閑位置;當線程從隊列里獲取元素的時候,若隊列為空則阻塞等待直到隊列里有新的元素.發送線程在將Message發送給處理中心的時候,在Openfire服務可用的情況下,則代表該條Message消費成功,Openfire的消息可靠性機制保證了這點;Openfire服務若不可用,Message的可靠性由數據處理模塊保證,發送線程在向Openfire發送消息的時候,如果連接不可用,將拋出異常,Message進一步交送給異常處理程序處理,異常處理程序將其放入TempQueue里,并不斷重發直到發送成功.客戶端接收訂閱消息功能實現如圖6所示.

圖5 數據處理流程圖

數據處理模塊是以炮號為單位進行處理,即處理完一炮的數據并全部發送成功后才會處理下一炮的數據,因此在整個處理過程中可以很容易地對處理狀態進行標記,Message發送成功也會有對應的消息發送成功標記.在數據處理模塊因為某種原因重啟時首先會檢查狀態記錄表,如果上一炮的數據沒有完全處理(即沒有處理完畢的狀態記錄)且距離當前時間不超過十分鐘(由于實驗數據的時效性,時間間隔久即失去了推送的意義),先讀取該炮的實驗數據進行處理,推送的時候根據狀態記錄表將未推送的消息重新推送,已成功推送的消息舍棄,該方式在一定程度上確保了消息送達用戶.

圖6 用戶接收推送消息

4 結論與展望

本文主要介紹了基于Openfire+Spark框架的即時通信系統中訂閱/推送功能的設計與實現過程.該功能是EAST即時通信系統的核心功能,根據實驗人員的需求進行消息定制和推送,實驗人員獲取信息的方式由傳統的主動檢索轉變為即時推送,這不僅方便了實驗人員查看實驗結果,也提高了消息的利用率.與此同時,該即時通信系統也存在很多需要改進的地方,系統目前處理的訂閱消息種類僅有信號量類型,比較單一,后續將根據實際情況接入EPICS系統消息,由于系統在最初消息類設計時就考慮到后續的擴展情況,因此增加消息類別將比較方便.消息丟失問題也還需要進一步研究高效的方法,另外,消息推送算法隨著消息量的增加也需要進一步的優化.下一步的工作重點是進一步完善該即時通信系統.

猜你喜歡
數據處理數據庫用戶
認知診斷缺失數據處理方法的比較:零替換、多重插補與極大似然估計法*
心理學報(2022年4期)2022-04-12 07:38:02
ILWT-EEMD數據處理的ELM滾動軸承故障診斷
水泵技術(2021年3期)2021-08-14 02:09:20
數據庫
財經(2017年2期)2017-03-10 14:35:35
關注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
數據庫
財經(2016年15期)2016-06-03 07:38:02
關注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
數據庫
財經(2016年3期)2016-03-07 07:44:46
數據庫
財經(2016年6期)2016-02-24 07:41:51
基于希爾伯特- 黃變換的去噪法在外測數據處理中的應用
主站蜘蛛池模板: 亚洲嫩模喷白浆| 在线观看国产精品第一区免费 | 日本精品视频一区二区 | 日韩东京热无码人妻| 亚洲天堂精品在线| 看国产一级毛片| 老司机精品99在线播放| 国产本道久久一区二区三区| 97在线观看视频免费| 久久综合国产乱子免费| 超清人妻系列无码专区| 久久精品这里只有精99品| 亚洲精品无码日韩国产不卡| 免费三A级毛片视频| 国产91蝌蚪窝| 无码AV动漫| igao国产精品| 亚洲色图狠狠干| 欧美精品导航| 欧美va亚洲va香蕉在线| 美女免费精品高清毛片在线视| 91精品网站| 日韩欧美国产精品| 爆乳熟妇一区二区三区| 激情网址在线观看| 日韩av电影一区二区三区四区| 中文无码精品a∨在线观看| 孕妇高潮太爽了在线观看免费| 国产精品jizz在线观看软件| 久久亚洲国产最新网站| 在线免费无码视频| 日韩欧美国产另类| 一级毛片在线播放| 4虎影视国产在线观看精品| 强乱中文字幕在线播放不卡| 欧美精品三级在线| 中文字幕第1页在线播| 国产精品亚洲日韩AⅤ在线观看| 天天操天天噜| 久久伊伊香蕉综合精品| 精品一区二区三区无码视频无码| 国产激情无码一区二区APP| 国产91熟女高潮一区二区| 最新痴汉在线无码AV| 久久香蕉国产线看观看式| 米奇精品一区二区三区| 99精品国产高清一区二区| 日韩AV无码免费一二三区| 国产99久久亚洲综合精品西瓜tv| 白浆免费视频国产精品视频| 国产在线啪| 久久黄色一级片| 国产杨幂丝袜av在线播放| 美女扒开下面流白浆在线试听| 国产欧美中文字幕| 日韩欧美成人高清在线观看| 天天激情综合| 最新国产午夜精品视频成人| 国产一区自拍视频| 欧美精品成人一区二区在线观看| 无遮挡国产高潮视频免费观看| 精品国产自在在线在线观看| 欧美日韩精品一区二区在线线| 高潮毛片无遮挡高清视频播放| 国产aaaaa一级毛片| 国产免费福利网站| 成人av手机在线观看| 日本午夜在线视频| 亚洲美女操| 国产精品欧美日本韩免费一区二区三区不卡| 亚洲中文无码av永久伊人| 欧美日韩成人| 欧美色视频网站| 成人第一页| 亚洲精品无码久久久久苍井空| 国产精品19p| 国产精品女人呻吟在线观看| 亚洲永久色| 国产免费人成视频网| 国产理论最新国产精品视频| 91香蕉视频下载网站| 激情亚洲天堂|