国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于WebSocket的RTS2 Web控制研究

2014-05-13 01:25:06衛(wèi)守林曹子皇
天文研究與技術(shù) 2014年4期
關(guān)鍵詞:服務(wù)器端瀏覽器望遠(yuǎn)鏡

衛(wèi)守林,曹子皇,王 鋒,鄧 輝,梁 波,戴 偉

(1.昆明理工大學(xué)云南省計(jì)算機(jī)技術(shù)應(yīng)用重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650500;2.中國科學(xué)院國家天文臺,北京 100012;3.中國科學(xué)院云南天文臺,云南 昆明 650011)

基于WebSocket的RTS2 Web控制研究

衛(wèi)守林1,3,曹子皇2,王 鋒1,3,鄧 輝1,梁 波1,戴 偉1,3

(1.昆明理工大學(xué)云南省計(jì)算機(jī)技術(shù)應(yīng)用重點(diǎn)實(shí)驗(yàn)室,云南 昆明 650500;2.中國科學(xué)院國家天文臺,北京 100012;3.中國科學(xué)院云南天文臺,云南 昆明 650011)

望遠(yuǎn)鏡自主觀測軟件是自主控制天文望遠(yuǎn)鏡技術(shù)中的重要組成部分,也是當(dāng)前天文技術(shù)研究的一個熱點(diǎn)。開源的RTS2是目前非常流行的望遠(yuǎn)鏡自主觀測的軟件系統(tǒng),但RTS2中提供的Web控制僅是一個演示,功能相對簡單,也不具備實(shí)時性。隨著HTML5和WebSocket技術(shù)的發(fā)展,在深入分析RTS2源碼的基礎(chǔ)上,實(shí)現(xiàn)了RTS2服務(wù)器端的WebSocket支持,利用HTML5的WebSocket技術(shù)完成了一個望遠(yuǎn)鏡實(shí)時監(jiān)控Web終端系統(tǒng)原型,為遠(yuǎn)程控制與狀態(tài)實(shí)時監(jiān)控提供了一個簡單、方便的平臺,為后續(xù)研究工作打下了良好的基礎(chǔ)。

遠(yuǎn)程控制;RTS2;實(shí)時監(jiān)控;WebSocket

CN53-1189/P ISSN1672-7673

RTS2[1](Remote Telescope System 2nd version-遠(yuǎn)程望遠(yuǎn)鏡系統(tǒng)第2版)是一個開放源碼的天文望遠(yuǎn)鏡自主觀測軟件系統(tǒng),在Linux操作系統(tǒng)下開發(fā)運(yùn)行,目的是實(shí)現(xiàn)望遠(yuǎn)鏡的全自主的觀測控制。RTS2從設(shè)計(jì)之初,對程序可擴(kuò)展性就進(jìn)行了較完善的考慮,所有的設(shè)備和服務(wù)可作為插件,即插即用(Plug and Play)[2],支持多種不同類型的設(shè)備。同時使用面向?qū)ο驝++編寫,對于新類型的設(shè)備,也能實(shí)現(xiàn)快速的擴(kuò)展。另外RTS2開源的特點(diǎn),使得天文技術(shù)的研究人員可以獲得源代碼,并在其基礎(chǔ)上進(jìn)行二次開發(fā)。

在RTS2中提供了多種工具對系統(tǒng)進(jìn)行控制,如rts2-mon、rts2-cmon、rts2-user等。這些工具有個共同點(diǎn),就是首先客戶端必須安裝這些工具和工具依賴的RTS2庫文件,并且只能在安裝的機(jī)器上運(yùn)行,另外基于命令行的控制界面也相對粗糙,不方便進(jìn)行操作。在RTS2中提供了rts2-xmlrpcd的服務(wù)[3],通過該服務(wù)的8889端口,可以以網(wǎng)絡(luò)的方式對RTS2進(jìn)行監(jiān)控和控制,但沒有辦法實(shí)時的監(jiān)控,也不能對參數(shù)值進(jìn)行修改。另外RTS2中提供了XMLRPC和JSON協(xié)議的支持,但這兩種協(xié)議都不支持實(shí)時的消息推送與廣播。RTS3雖然有完善的網(wǎng)絡(luò)界面,但其不是開源系統(tǒng),不利于軟件的應(yīng)用與推廣。

顯然,望遠(yuǎn)鏡系統(tǒng)的實(shí)時狀態(tài)和實(shí)時報警信息,對望遠(yuǎn)鏡系統(tǒng)的管理者非常重要。從計(jì)算機(jī)技術(shù)發(fā)展看,隨著HTML5技術(shù)的出現(xiàn),WebSocket技術(shù)得到了長足的發(fā)展??紤]到望遠(yuǎn)鏡遠(yuǎn)程控制端并不會出現(xiàn)多用戶、高并發(fā)的請求,使用WebSocket也不會對服務(wù)器端有非常高的性能要求,WebSocket的雙向通信技術(shù)無疑會是基于網(wǎng)絡(luò)的望遠(yuǎn)鏡實(shí)時監(jiān)控中非常合理有效的解決方案。本文正是在這樣的背景下開展相應(yīng)的研究工作,在分析RTS2中源碼的基礎(chǔ)上,建立新的WebSocket服務(wù),能支持RTS2的所有的控制命令和RTS2狀態(tài)信息的推送與廣播,構(gòu)建了RTS2實(shí)時監(jiān)控網(wǎng)絡(luò)的原型系統(tǒng)。

1 WebSocket通信原理

WebSocket是HTML5提供的一種瀏覽器與服務(wù)器間進(jìn)行全雙向通訊的技術(shù)。在WebSocket API中,瀏覽器和服務(wù)器只需要做一個握手的動作,瀏覽器和服務(wù)器之間就形成了一條快速通道,兩者之間直接可以進(jìn)行數(shù)據(jù)互相傳送[4]。

WebSocket協(xié)議看起來更像TCP的Socket協(xié)議,但卻是基于HTTP1.1協(xié)議,是HTTP協(xié)議的一個增強(qiáng)升級,因此具備了HTTP協(xié)議的很多優(yōu)點(diǎn),例如兼容HTTP反向代理等??蛻舳送ㄟ^WebSocket與服務(wù)端進(jìn)行通信時,只有第一次握手交互的信息比較復(fù)雜,在握手成功后便進(jìn)入雙向長連接的數(shù)據(jù)傳輸階段,此時傳輸?shù)膸缀踔皇羌償?shù)據(jù),性能很高[5],其通信模式為幀通信??蛻舳撕头?wù)端發(fā)送非握手文本消息時,消息以UTF-8編碼,以0x00表示數(shù)據(jù)開始,0xFF表示數(shù)據(jù)結(jié)束。WebSocket需要通過握手連接,類似于TCP需要客戶端和服務(wù)器端進(jìn)行握手連接,連接成功后才能相互通信。如圖1為WebSocket的通信過程。

圖1 WebSocket的通信過程Fig.1 The procedure of communication with the WebSocket

當(dāng)網(wǎng)絡(luò)應(yīng)用程序調(diào)用new WebSocket(url)創(chuàng)建連接時,應(yīng)用程序開始與地址為url的WebServer建立握手連接的過程。

(1)客戶端瀏覽器首先要向服務(wù)器發(fā)起一個HTTP請求,通過HTTP協(xié)議傳送WebSocket支持的版本號、協(xié)議的子版本號、原始地址、主機(jī)地址等等一系列字段給服務(wù)器端。其中附加頭信息“Upgrade:WebSocket”表明這是一個申請協(xié)議升級的HTTP請求。

(2)WebSocket服務(wù)器收到瀏覽器發(fā)送的握手請求后,如果數(shù)據(jù)包數(shù)據(jù)和格式正確,客戶端和服務(wù)器端的協(xié)議版本號匹配等,就接受本次握手連接,并給出相應(yīng)的數(shù)據(jù)回復(fù),回復(fù)的數(shù)據(jù)包中包含了客戶端Sec_WebSocket-Key的加密哈希值,回復(fù)的數(shù)據(jù)包也是采用HTTP協(xié)議傳輸。

(3)瀏覽器收到服務(wù)器回復(fù)的數(shù)據(jù)包后,如果數(shù)據(jù)包內(nèi)容、格式都沒有問題,就表示本次連接成功,觸發(fā)onopen消息,此時網(wǎng)絡(luò)開發(fā)者就可以在此時通過send接口向服務(wù)器發(fā)送數(shù)據(jù)。否則,握手連接失敗,網(wǎng)絡(luò)應(yīng)用程序會收到onerror消息,并且能知道連接失敗的原因。

目前流行的瀏覽器都支持WebSocket協(xié)議,例如Chrome、Safari、Firefox、IE等,隨著WebSocket協(xié)議草案的不斷變化,各個瀏覽器對協(xié)議的實(shí)現(xiàn)也在不停地更新。主流瀏覽器對HTML5 WebSocket的支持情況如下:

BrowersSupported and VersionChrome Supported in version 4+Firefox Supported in version 4+I(xiàn)nternet Explorer Supported in version 10+Opera Supported in version 10+Safari Supported in version 5+

2 RTS2的服務(wù)端WebSocket實(shí)現(xiàn)

使用WebSocket進(jìn)行全雙向的通信,網(wǎng)絡(luò)瀏覽器和服務(wù)器都必須支持WebSocket協(xié)議。在目前RTS2的實(shí)現(xiàn)中不包含WebSocket服務(wù)器端的實(shí)現(xiàn),在本節(jié)中首先介紹在RTS2中的WebSocket協(xié)議的設(shè)計(jì),接著說明RTS2的WebSocket服務(wù)器端實(shí)現(xiàn),最后說明如何利用WebSocket協(xié)議實(shí)現(xiàn)命令響應(yīng)和RTS2中狀態(tài)信息的推送。

2.1 WebSocket協(xié)議的實(shí)現(xiàn)

在WebSocket協(xié)議實(shí)現(xiàn)中,使用了網(wǎng)絡(luò)通信庫Push Framework[6],Push Framework是一個開源高性能的C++網(wǎng)絡(luò)開發(fā)庫,能簡化開發(fā)工作量,特別是對實(shí)時數(shù)據(jù)推送和廣播有非常好的支持。Push Framework本身是協(xié)議無關(guān)的,它僅提供了一個通信的框架,為了實(shí)現(xiàn)具體的協(xié)議,需要繼承實(shí)現(xiàn)如下3個關(guān)鍵的抽象類:

IncomingPacket:由客戶端傳入的數(shù)據(jù),服務(wù)器需要解析和響應(yīng);

OutgoingPacket:服務(wù)器向客戶端發(fā)送的數(shù)據(jù);

Protocol:定義如何對IncomingPacket進(jìn)行解析和如何封裝OutgoingPacket數(shù)據(jù)。

要實(shí)現(xiàn)WebSocket的協(xié)議,需要實(shí)現(xiàn)在PushFramework∷Protocol抽象類中定義的純虛函數(shù),如下:

encodeOutgoingPacket:服務(wù)器端對發(fā)送到客戶端的數(shù)據(jù)進(jìn)行封裝,約定服務(wù)器端到客戶端的數(shù)據(jù)格式。

frameOutgoingPacket:將封裝后的數(shù)據(jù)寫入指定的緩沖區(qū)。

tryDeframeIncomingPacket:從緩沖區(qū)中讀取數(shù)據(jù)并轉(zhuǎn)換為IncomingPacket類型的數(shù)據(jù)。

decodeIncomingPacket:服務(wù)器端對從客戶端接收數(shù)據(jù)進(jìn)行解封裝,約定客戶端到服務(wù)器的數(shù)據(jù)格式。

基于Push Framework實(shí)現(xiàn)的WebSocket協(xié)議通信過程如圖2。

圖2 WebSocket協(xié)議實(shí)現(xiàn)中函數(shù)的調(diào)用過程Fig.2 The procedure of function call in implementing the WebSocket

2.2 RTS2 WebSocket服務(wù)器

RTS2中rts2core∷Client類是客戶端連接類,該類首先與RTS2的中心控制程序(CentralD)進(jìn)行連接,通過CentralD即可獲得與所有設(shè)備的連接對象(ConnClient)[7]。通過該連接對象就可以獲得和修改設(shè)備參數(shù),對設(shè)備進(jìn)行命令發(fā)送和控制。在RTS2中內(nèi)置的工具rts2-mon就是繼承rts2core∷Client類,擴(kuò)展當(dāng)中的方法,實(shí)現(xiàn)對整個RTS2系統(tǒng)的控制和監(jiān)控。在本研究工作中WebSocket服務(wù)器也是通過繼承rts2core∷Client類結(jié)合WebSocket協(xié)議實(shí)現(xiàn)。

首先需要定義服務(wù)器端類rts2websocket∷WebSocketServer繼承于rts2core∷Client,然后重寫rts2core∷Client類中的幾個關(guān)鍵函數(shù):

processOption():程序執(zhí)行時命令行參數(shù)解析處理函數(shù)。在WebSocketServer的processOption()函數(shù)實(shí)現(xiàn)中增加了命令行參數(shù),首先調(diào)用父類的init()函數(shù),緊接著完成以下3方面的工作:

(1)創(chuàng)建PushFramework的服務(wù)器類,設(shè)置使用的協(xié)議為WebSocket;

(2)對客戶端的超時時間、最大連接數(shù)等參數(shù)進(jìn)行設(shè)置;

(3)注冊命令響應(yīng)服務(wù)和狀態(tài)信息推送服務(wù)。

如圖3為服務(wù)器端類的定義:

圖3 WebSocket服務(wù)器類的類圖Fig.3 A class diagram of a WebSocket server

2.3 命令響應(yīng)

在PushFramework中,要完成數(shù)據(jù)響應(yīng)和處理需要注冊相應(yīng)的服務(wù),服務(wù)的創(chuàng)建通過繼承PushFramework∷Service完成。具體的處理邏輯是在Service類中的handle函數(shù)中。要實(shí)現(xiàn)對RTS2的控制,需要能夠通過網(wǎng)絡(luò)客戶端向WebSocketServer發(fā)送命令,WebSocketServer返回處理結(jié)果,如接收到客戶端對CCD的曝光命令后,WebSocketServer需要對命令進(jìn)行判斷,執(zhí)行相應(yīng)的操作。這個過程是屬于請求和響應(yīng)的模式,通過創(chuàng)建CommandService類實(shí)現(xiàn)。CommandService類的handle函數(shù)調(diào)用WebSocketServer的處理命令函數(shù)processCommand,完成客戶端命令的響應(yīng)。如下:

2.4 狀態(tài)信息推送

通過對RTS2中rts2-mon工具實(shí)現(xiàn)的源碼分析,RTS2系統(tǒng)的狀態(tài)消息在Block∷message函數(shù)中獲取,該函數(shù)以虛函數(shù)的方式定義。因此只需要在WebSocketServer類中對該函數(shù)重寫,將獲取的信息進(jìn)行推送和廣播,代碼如下:

上段代碼中的StreamedCommunication為廣播的服務(wù)類。另外要實(shí)現(xiàn)廣播的功能,還需要調(diào)用broadcastManager.CreateQueue函數(shù)創(chuàng)建廣播消息隊(duì)列。

3 RTS2實(shí)時監(jiān)控

在支持WebSocket的瀏覽器中,可以直接在JavaScript中通過WebSocket對象實(shí)現(xiàn)通信,僅使用HTML和JavaScript即可完成網(wǎng)絡(luò)控制端的編碼工作,不依賴于任何服務(wù)器端的語言技術(shù)。WebSocket對象的readyState屬性表示連接當(dāng)前的狀態(tài),有4種狀態(tài):

?CONNECTING(0):表示還沒建立連接;

?OPEN(1):已經(jīng)建立連接,可以進(jìn)行通訊;

?CLOSING(2):通過關(guān)閉握手,正在關(guān)閉連接;

?CLOSED(3):連接已經(jīng)關(guān)閉或無法打開;

WebSocket對象主要通過onopen、onmessage、onclose和onerror 4個事件實(shí)現(xiàn)對socket消息的異步響應(yīng)。

基于上述討論,模擬RTS2的自帶工具rts2-mon,在客戶端采用WebSocket技術(shù),實(shí)現(xiàn)了一套基于RTS2的實(shí)時監(jiān)測和控制終端系統(tǒng)原型。原型系統(tǒng)實(shí)現(xiàn)的功能包括了RTS2設(shè)備列表的獲取,設(shè)備參數(shù)的查看和修改,命令發(fā)送和RTS2狀態(tài)信息的實(shí)時獲取。RTS2實(shí)時監(jiān)控客戶端界面如圖4。

圖4 客戶端界面Fig.4 A screenshot of the user interface of a WebSocket console for an RTS2 system

4 結(jié)束語

RTS2在天文領(lǐng)域已被廣泛研究和使用,但因其沒有完整的遠(yuǎn)程界面控制端,給用戶操作帶來很大的不便。實(shí)現(xiàn)網(wǎng)絡(luò)方式的控制界面是對RTS2非常好的補(bǔ)充。而傳統(tǒng)的網(wǎng)絡(luò)通信都在客戶端驅(qū)動,客戶端無法實(shí)時接收望遠(yuǎn)鏡控制系統(tǒng)的實(shí)時信息。WebSocket與RTS2已實(shí)現(xiàn)的XMLRPC協(xié)議相比,協(xié)議簡單且具有實(shí)時性。另外RTS2實(shí)現(xiàn)的JSON協(xié)議只能在XMLRPCD服務(wù)實(shí)現(xiàn)的網(wǎng)絡(luò)中使用,不能實(shí)現(xiàn)跨域訪問,同時使用JSON協(xié)議,服務(wù)器也不具備實(shí)時向客戶端推送消息的特性。

本文以實(shí)現(xiàn)RTS2的實(shí)時網(wǎng)絡(luò)監(jiān)控為目標(biāo),利用WebSocket的雙向通信特點(diǎn),在RTS2體系結(jié)構(gòu)下實(shí)現(xiàn)了WebSocket通信協(xié)議,構(gòu)建了WebSocket服務(wù)器端,并通過編寫控制端原型系統(tǒng)驗(yàn)證了技術(shù)的可行性。研究成果可以直接應(yīng)用在將RTS2作為自主觀測控制系統(tǒng)的望遠(yuǎn)鏡中。當(dāng)然,本研究中實(shí)現(xiàn)的客戶端主要借鑒了原有的界面樣式,在未來應(yīng)用中也可以根據(jù)需要提供更好的用戶交互方式,這也是未來可以進(jìn)一步完善與改進(jìn)的工作。

[1] Remote Telescope System-2ndversion[EB/OL].[2013-12-14].http://rts2.org/.

[2] 趙永恒.天文望遠(yuǎn)鏡的自動觀測技術(shù)[J].科研信息化技術(shù)與應(yīng)用,2012,3(4):11-16.

Zhao Yongheng.Technology of automatic observation of astronomical telescope[J].E-Science Technology&Application,2012,3(4):11-16.

[3] 冉凡輝,鄧輝,梁波,等.基于XML-RPC的RTS2自主觀測系統(tǒng)遠(yuǎn)程訪問技術(shù)[J].天文研究與技術(shù)——國家天文臺臺刊,2013,10(4):372-377.

Ran Fanhui,Deng Hui,Liang Bo,et al.A study of remote access techniques for an RTS2 autonomous observation software system based on the XML-RPC[J].Astronomical Research&Technology——Publications of National Astronomical Observatories of China,2013,10(4):372-377.

[4] 溫照松,易仁偉,姚寒冰.基于WebSocket的實(shí)時Web應(yīng)用解決方案[J].電腦知識與技術(shù),2012,8(16):3826-3828.

Weng Zhaosong,Yi Renwei,Yao Hanbing.WebSocket based real time Web application solution [J].Computer Knowledge and Technology,2012,8(16):3826-3828.

[5] 李代立,陳榕.WebSocket在Web實(shí)時通信領(lǐng)域的研究[J].電腦知識與技術(shù),2010,6 (28):7923-7925+7935.

Li Daili,Chen Rong.The research of WebSocket based on Web real-time communication[J]. Computer Knowledge and Technology,2010,6(28):7923-7925+7935.

[6] Push Framework[EB/OL].[2013-11-18].http://www.pushframework.com.

[7] Kubánek P,Jelínek M,F(xiàn)rench J,et al.The RTS2 protocol[C]//Proceedings of the SPIE: Advanced Software and Control for Astronomy II.2008:92-103.

A Study of Web Control of an RTS2 System Based on the WebSocket

Wei Shoulin1,3,Cao Zihuang2,Wang Feng1,3,Deng Hui1,Liang Bo1,Dai Wei1,3
(1.Key Laoratory of Applications of Computer Technoloies of the Yunnan Province,University of Science and Technology of Kunming,Kunming 650500,China,Email:wsl@cnlab.net;2.National Astronomical Observatories,Chinese Academy of Sciences,Beijing 100012,China;3.Yunnan Observatories,Chinese Academy of Sciences,Kunming 650011,China)

For a modern automated astronomical telescope its autonomous-control software system is one of the most important parts.Currently,research of autonomous-control software is becoming rather active.The RTS2,which is an open-source software system,has been used for many small-aperture astronomical telescopes.However,the subsystem for web control implemented in the RTS2 is too simple to include many useful functions such as real-time control and system-information display.By taking advantage of the development of the HTML5 and the WebSocket technology,we study implementing a server-side WebSocket protocol in the RTS2 based on an in-depth analysis of the RTS2 source codes.By using the HTML5 and WebSocket technology we have developed a prototype subsystem for web control via real-time monitoring.Our study results in a simple and convenient platform for remote control and real-time monitoring of automated astronomical telescopes,and it lays a sound foundation for relevant future research.

Remote control;RTS2;Real-time monitoring;WebSocket

TP311.1

A

1672-7673(2014)04-0404-06

2013-12-20;

2014-01-18

衛(wèi)守林,男,講師.研究方向:軟件架構(gòu),網(wǎng)絡(luò)安全,天文計(jì)算方法.Email:wsl@cnlab.net

猜你喜歡
服務(wù)器端瀏覽器望遠(yuǎn)鏡
神奇的“千里眼”——望遠(yuǎn)鏡
反瀏覽器指紋追蹤
電子制作(2019年10期)2019-06-17 11:45:14
神奇的千里眼——望遠(yuǎn)鏡
打造最大望遠(yuǎn)鏡
淺析異步通信層的架構(gòu)在ASP.NET 程序中的應(yīng)用
成功(2018年10期)2018-03-26 02:56:14
超級望遠(yuǎn)鏡頭
環(huán)球?yàn)g覽器
再見,那些年我們嘲笑過的IE瀏覽器
在Windows中安裝OpenVPN
網(wǎng)頁防篡改中分布式文件同步復(fù)制系統(tǒng)
安徽省| 峡江县| 海晏县| 昂仁县| 喀喇沁旗| 郎溪县| 大渡口区| 简阳市| 兰西县| 德钦县| 上思县| 同江市| 启东市| 永平县| 姜堰市| 娱乐| 淅川县| 伊吾县| 通山县| 富顺县| 贞丰县| 西城区| 鄂尔多斯市| 孟村| 水城县| 嘉鱼县| 仙游县| 山东省| 平原县| 江阴市| 阿荣旗| 凯里市| 汉沽区| 泰宁县| 凤庆县| 高清| 开封县| 旬邑县| 紫云| 开原市| 宁都县|