基于WebSocket的RTS2 Web控制研究

2014-05-13 01:25卫守林曹子皇
天文研究与技术 2014年4期
关键词:服务器端浏览器望远镜

卫守林,曹子皇,王 锋,邓 辉,梁 波,戴 伟

(1.昆明理工大学云南省计算机技术应用重点实验室,云南 昆明 650500;2.中国科学院国家天文台,北京 100012;3.中国科学院云南天文台,云南 昆明 650011)

基于WebSocket的RTS2 Web控制研究

卫守林1,3,曹子皇2,王 锋1,3,邓 辉1,梁 波1,戴 伟1,3

(1.昆明理工大学云南省计算机技术应用重点实验室,云南 昆明 650500;2.中国科学院国家天文台,北京 100012;3.中国科学院云南天文台,云南 昆明 650011)

望远镜自主观测软件是自主控制天文望远镜技术中的重要组成部分,也是当前天文技术研究的一个热点。开源的RTS2是目前非常流行的望远镜自主观测的软件系统,但RTS2中提供的Web控制仅是一个演示,功能相对简单,也不具备实时性。随着HTML5和WebSocket技术的发展,在深入分析RTS2源码的基础上,实现了RTS2服务器端的WebSocket支持,利用HTML5的WebSocket技术完成了一个望远镜实时监控Web终端系统原型,为远程控制与状态实时监控提供了一个简单、方便的平台,为后续研究工作打下了良好的基础。

远程控制;RTS2;实时监控;WebSocket

CN53-1189/P ISSN1672-7673

RTS2[1](Remote Telescope System 2nd version-远程望远镜系统第2版)是一个开放源码的天文望远镜自主观测软件系统,在Linux操作系统下开发运行,目的是实现望远镜的全自主的观测控制。RTS2从设计之初,对程序可扩展性就进行了较完善的考虑,所有的设备和服务可作为插件,即插即用(Plug and Play)[2],支持多种不同类型的设备。同时使用面向对象C++编写,对于新类型的设备,也能实现快速的扩展。另外RTS2开源的特点,使得天文技术的研究人员可以获得源代码,并在其基础上进行二次开发。

在RTS2中提供了多种工具对系统进行控制,如rts2-mon、rts2-cmon、rts2-user等。这些工具有个共同点,就是首先客户端必须安装这些工具和工具依赖的RTS2库文件,并且只能在安装的机器上运行,另外基于命令行的控制界面也相对粗糙,不方便进行操作。在RTS2中提供了rts2-xmlrpcd的服务[3],通过该服务的8889端口,可以以网络的方式对RTS2进行监控和控制,但没有办法实时的监控,也不能对参数值进行修改。另外RTS2中提供了XMLRPC和JSON协议的支持,但这两种协议都不支持实时的消息推送与广播。RTS3虽然有完善的网络界面,但其不是开源系统,不利于软件的应用与推广。

显然,望远镜系统的实时状态和实时报警信息,对望远镜系统的管理者非常重要。从计算机技术发展看,随着HTML5技术的出现,WebSocket技术得到了长足的发展。考虑到望远镜远程控制端并不会出现多用户、高并发的请求,使用WebSocket也不会对服务器端有非常高的性能要求,WebSocket的双向通信技术无疑会是基于网络的望远镜实时监控中非常合理有效的解决方案。本文正是在这样的背景下开展相应的研究工作,在分析RTS2中源码的基础上,建立新的WebSocket服务,能支持RTS2的所有的控制命令和RTS2状态信息的推送与广播,构建了RTS2实时监控网络的原型系统。

1 WebSocket通信原理

WebSocket是HTML5提供的一种浏览器与服务器间进行全双向通讯的技术。在WebSocket API中,浏览器和服务器只需要做一个握手的动作,浏览器和服务器之间就形成了一条快速通道,两者之间直接可以进行数据互相传送[4]。

WebSocket协议看起来更像TCP的Socket协议,但却是基于HTTP1.1协议,是HTTP协议的一个增强升级,因此具备了HTTP协议的很多优点,例如兼容HTTP反向代理等。客户端通过WebSocket与服务端进行通信时,只有第一次握手交互的信息比较复杂,在握手成功后便进入双向长连接的数据传输阶段,此时传输的几乎只是纯数据,性能很高[5],其通信模式为帧通信。客户端和服务端发送非握手文本消息时,消息以UTF-8编码,以0x00表示数据开始,0xFF表示数据结束。WebSocket需要通过握手连接,类似于TCP需要客户端和服务器端进行握手连接,连接成功后才能相互通信。如图1为WebSocket的通信过程。

图1 WebSocket的通信过程Fig.1 The procedure of communication with the WebSocket

当网络应用程序调用new WebSocket(url)创建连接时,应用程序开始与地址为url的WebServer建立握手连接的过程。

(1)客户端浏览器首先要向服务器发起一个HTTP请求,通过HTTP协议传送WebSocket支持的版本号、协议的子版本号、原始地址、主机地址等等一系列字段给服务器端。其中附加头信息“Upgrade:WebSocket”表明这是一个申请协议升级的HTTP请求。

(2)WebSocket服务器收到浏览器发送的握手请求后,如果数据包数据和格式正确,客户端和服务器端的协议版本号匹配等,就接受本次握手连接,并给出相应的数据回复,回复的数据包中包含了客户端Sec_WebSocket-Key的加密哈希值,回复的数据包也是采用HTTP协议传输。

(3)浏览器收到服务器回复的数据包后,如果数据包内容、格式都没有问题,就表示本次连接成功,触发onopen消息,此时网络开发者就可以在此时通过send接口向服务器发送数据。否则,握手连接失败,网络应用程序会收到onerror消息,并且能知道连接失败的原因。

目前流行的浏览器都支持WebSocket协议,例如Chrome、Safari、Firefox、IE等,随着WebSocket协议草案的不断变化,各个浏览器对协议的实现也在不停地更新。主流浏览器对HTML5 WebSocket的支持情况如下:

BrowersSupported and VersionChrome Supported in version 4+Firefox Supported in version 4+Internet Explorer Supported in version 10+Opera Supported in version 10+Safari Supported in version 5+

2 RTS2的服务端WebSocket实现

使用WebSocket进行全双向的通信,网络浏览器和服务器都必须支持WebSocket协议。在目前RTS2的实现中不包含WebSocket服务器端的实现,在本节中首先介绍在RTS2中的WebSocket协议的设计,接着说明RTS2的WebSocket服务器端实现,最后说明如何利用WebSocket协议实现命令响应和RTS2中状态信息的推送。

2.1 WebSocket协议的实现

在WebSocket协议实现中,使用了网络通信库Push Framework[6],Push Framework是一个开源高性能的C++网络开发库,能简化开发工作量,特别是对实时数据推送和广播有非常好的支持。Push Framework本身是协议无关的,它仅提供了一个通信的框架,为了实现具体的协议,需要继承实现如下3个关键的抽象类:

IncomingPacket:由客户端传入的数据,服务器需要解析和响应;

OutgoingPacket:服务器向客户端发送的数据;

Protocol:定义如何对IncomingPacket进行解析和如何封装OutgoingPacket数据。

要实现WebSocket的协议,需要实现在PushFramework∷Protocol抽象类中定义的纯虚函数,如下:

encodeOutgoingPacket:服务器端对发送到客户端的数据进行封装,约定服务器端到客户端的数据格式。

frameOutgoingPacket:将封装后的数据写入指定的缓冲区。

tryDeframeIncomingPacket:从缓冲区中读取数据并转换为IncomingPacket类型的数据。

decodeIncomingPacket:服务器端对从客户端接收数据进行解封装,约定客户端到服务器的数据格式。

基于Push Framework实现的WebSocket协议通信过程如图2。

图2 WebSocket协议实现中函数的调用过程Fig.2 The procedure of function call in implementing the WebSocket

2.2 RTS2 WebSocket服务器

RTS2中rts2core∷Client类是客户端连接类,该类首先与RTS2的中心控制程序(CentralD)进行连接,通过CentralD即可获得与所有设备的连接对象(ConnClient)[7]。通过该连接对象就可以获得和修改设备参数,对设备进行命令发送和控制。在RTS2中内置的工具rts2-mon就是继承rts2core∷Client类,扩展当中的方法,实现对整个RTS2系统的控制和监控。在本研究工作中WebSocket服务器也是通过继承rts2core∷Client类结合WebSocket协议实现。

首先需要定义服务器端类rts2websocket∷WebSocketServer继承于rts2core∷Client,然后重写rts2core∷Client类中的几个关键函数:

processOption():程序执行时命令行参数解析处理函数。在WebSocketServer的processOption()函数实现中增加了命令行参数,首先调用父类的init()函数,紧接着完成以下3方面的工作:

(1)创建PushFramework的服务器类,设置使用的协议为WebSocket;

(2)对客户端的超时时间、最大连接数等参数进行设置;

(3)注册命令响应服务和状态信息推送服务。

如图3为服务器端类的定义:

图3 WebSocket服务器类的类图Fig.3 A class diagram of a WebSocket server

2.3 命令响应

在PushFramework中,要完成数据响应和处理需要注册相应的服务,服务的创建通过继承PushFramework∷Service完成。具体的处理逻辑是在Service类中的handle函数中。要实现对RTS2的控制,需要能够通过网络客户端向WebSocketServer发送命令,WebSocketServer返回处理结果,如接收到客户端对CCD的曝光命令后,WebSocketServer需要对命令进行判断,执行相应的操作。这个过程是属于请求和响应的模式,通过创建CommandService类实现。CommandService类的handle函数调用WebSocketServer的处理命令函数processCommand,完成客户端命令的响应。如下:

2.4 状态信息推送

通过对RTS2中rts2-mon工具实现的源码分析,RTS2系统的状态消息在Block∷message函数中获取,该函数以虚函数的方式定义。因此只需要在WebSocketServer类中对该函数重写,将获取的信息进行推送和广播,代码如下:

上段代码中的StreamedCommunication为广播的服务类。另外要实现广播的功能,还需要调用broadcastManager.CreateQueue函数创建广播消息队列。

3 RTS2实时监控

在支持WebSocket的浏览器中,可以直接在JavaScript中通过WebSocket对象实现通信,仅使用HTML和JavaScript即可完成网络控制端的编码工作,不依赖于任何服务器端的语言技术。WebSocket对象的readyState属性表示连接当前的状态,有4种状态:

•CONNECTING(0):表示还没建立连接;

•OPEN(1):已经建立连接,可以进行通讯;

•CLOSING(2):通过关闭握手,正在关闭连接;

•CLOSED(3):连接已经关闭或无法打开;

WebSocket对象主要通过onopen、onmessage、onclose和onerror 4个事件实现对socket消息的异步响应。

基于上述讨论,模拟RTS2的自带工具rts2-mon,在客户端采用WebSocket技术,实现了一套基于RTS2的实时监测和控制终端系统原型。原型系统实现的功能包括了RTS2设备列表的获取,设备参数的查看和修改,命令发送和RTS2状态信息的实时获取。RTS2实时监控客户端界面如图4。

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

4 结束语

RTS2在天文领域已被广泛研究和使用,但因其没有完整的远程界面控制端,给用户操作带来很大的不便。实现网络方式的控制界面是对RTS2非常好的补充。而传统的网络通信都在客户端驱动,客户端无法实时接收望远镜控制系统的实时信息。WebSocket与RTS2已实现的XMLRPC协议相比,协议简单且具有实时性。另外RTS2实现的JSON协议只能在XMLRPCD服务实现的网络中使用,不能实现跨域访问,同时使用JSON协议,服务器也不具备实时向客户端推送消息的特性。

本文以实现RTS2的实时网络监控为目标,利用WebSocket的双向通信特点,在RTS2体系结构下实现了WebSocket通信协议,构建了WebSocket服务器端,并通过编写控制端原型系统验证了技术的可行性。研究成果可以直接应用在将RTS2作为自主观测控制系统的望远镜中。当然,本研究中实现的客户端主要借鉴了原有的界面样式,在未来应用中也可以根据需要提供更好的用户交互方式,这也是未来可以进一步完善与改进的工作。

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

[2] 赵永恒.天文望远镜的自动观测技术[J].科研信息化技术与应用,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自主观测系统远程访问技术[J].天文研究与技术——国家天文台台刊,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的实时Web应用解决方案[J].电脑知识与技术,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实时通信领域的研究[J].电脑知识与技术,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,French 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

卫守林,男,讲师.研究方向:软件架构,网络安全,天文计算方法.Email:wsl@cnlab.net

猜你喜欢
服务器端浏览器望远镜
Linux环境下基于Socket的数据传输软件设计
微软发布新Edge浏览器预览版下载换装Chrome内核
反浏览器指纹追踪
神奇的千里眼——望远镜
打造最大望远镜
基于Qt的安全即时通讯软件服务器端设计
超级望远镜头
“赶紧送几架望远镜过来!”等7则
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用