林剑峰,杨宇鹏
(1. 海军驻上海电站辅机厂军代表室,上海 200090;2. 上海船舶运输科学研究所 航运技术与安全国家重点实验室,上海 200135)
监控软件远程客户端的设计开发
林剑峰1,杨宇鹏2
(1. 海军驻上海电站辅机厂军代表室,上海 200090;2. 上海船舶运输科学研究所 航运技术与安全国家重点实验室,上海 200135)
为解决监控软件客户端中代码重复、繁杂的问题,以监控软件为研究对象,进行简易型远程客户端的研究工作。该远程客户端系统以监控软件为服务器对象,通过解决服务器、客户机命令解析、内存中窗口页面管理、内存拷贝及图片格式流转换等问题,使客户端在无需重复进行界面代码编辑的前提下实时获取服务器端数据画面,并具有在不影响服务器运行的前提下多线程、多客户同时操纵服务器的能力。该系统可大大减少客户端系统的工作量,且采用跨平台的Qt编程环境还可使客户端平台从Windows扩展到Linux,Android等不同操作系统而无需重新编码。整套系统具有很强的实用性。
客户端; 内存拷贝; 跨平台
对于监控软件而言,远程客户端是必不可少的一部分,其通常包括服务器/客户端(C/S)和浏览器/服务器(B/S)两种模式。
1) 服务器/客户端(C/S)模式。这是最为普遍的开发模式。服务器端构建一个网络服务器,客户端根据需要再次实现相应的界面和流程并连接服务器,然后制定通信协议,以实现与服务器的通信。该模式的优点是客户端是针对服务端定制的,因此界面开发相对简单,网络通信也清晰明白;但是,一旦服务器端有变动,客户端的代码就需要作相应的改动,会增加重复开发的工作量。
2) 浏览器/服务器(B/S)模式。客户端是浏览器,而服务器端则分为处理数据的业务软件和负责与客户端通信的网站两部分。在该模式中,客户端是通过浏览器访问的,因此服务器端程序更改时,客户端程序无需作任何修改,这是该模式最大的优点;但是,服务器端需要构建网站及与处理数据的业务软件进行通信,且每个在服务器软件上运行的控件都需要移植到网站开发中,这会较大地增加开发的工作量和开发难度。
以上两种工作模式各有各的优缺点,但是均存在不同程度的重复编写或移植界面代码的问题。监控系统中界面复杂、控件众多,控件的重复编码会增加很多额外的工作量。因此,若能采用一种工作模式使客户端可跟随服务器端变化而不需要重新编码,则可提高系统开发的效率。当然,针对具体的系统工作环境也会有一定的前提条件,即服务器和客户端均工作在局域网环境中并没有极高的网络并发行为。
1.1系统需求及预期
对于常用的监控软件而言,针对不同的系统项目,除了要进行服务器端项目的编程之外,客户端程序的开发工作同样繁重。若能找到一种通用、简易的方式,通过编写一次代码即可跨项目、跨平台地实现服务器端与客户端界面的同步,将能减少大量的工作量,大大提高项目的进度。
远程客户端系统的功能模块结构及信息命令传递图见图1,其中,服务器是监控系统中的主要组成部分,除了完成系统的主要监控任务之外,还要对客户端与服务器之间的命令交互进行解析和发送数据。系统的主要工作流程如下:
(1) 客户端与服务器首次连接,发送连接命令;
(2) 服务器中的客户端管理模块接收命令,通过命令解析器解析出报文,送入客户端IP信息与请求命令管理器中进行命令解析;
(3) 服务器监控页面内存管理模块会接收该命令并进行相关页面的内存拷贝,同时在内存中进行数据的流格式转换;
(4) 客户端所需数据抓取器将经过流格式转换的数据从服务器监控页面内存管理模块中抓取出来,并存储在客户端管理模块的内存中;
(5) 客户端定时将客户端的IP信息和客户端所需数据组合成客户端的请求数据,发送至服务器;
(6) 客户端接收数据,并全屏显示得到的数据;
图1 远程客户端系统的功能模块结构及信息命令传递图
(7) 客户端若有鼠标点击命令发送,则跳转到流程“(2)”,重新开始工作流程的循环。
2.1服务器功能模块
2.1.1客户端网络命令解析器
客户端网络命令解析器作为服务器与客户端的网络通信模块,主要承担以下功能:
(1) 当不同的客户端发送来连接请求时,解析出客户端的IP地址请求命令及请求的监控画面等信息,并将这些信息送至信息与命令管理器模块;
(2) 当客户端传来画面请求命令时,记录该IP地址和请求命令,并将其送至信息与命令管理器模块;
(3) 将服务器要传送给客户端的数据通过网络发送出去。
2.1.2客户端IP信息与请求命令管理器
客户端IP信息与请求命令管理器管理着以下信息:
(1) 客户端IP,即身份信息;
(2) 客户端命令,即下次命令处理时的命令信息;
(3) 客户端请求的画面信息,即下次发送给客户端的内存画面ID。
客户端IP信息与请求命令会被服务器监控页面内存管理功能模块和客户端数据定时发送器抓取。
2.1.3服务器监控页面内存管理功能模块
服务器监控页面内存管理功能模块是系统中产生客户端所需数据的模块。共分为初始化状态下产生的数据信息和客户端命令状态下产生的数据信息2种情况。
(1) 初始化状态下数据信息的产生流程见图2,分为以下几个步骤:
① 判断此次请求是否是该客户端的第一次请求;
② 若该请求是客户端的第一次请求,则开辟新的内存区域,将默认的菜单栏窗口和主要显示栏窗口初始化,并将这2个窗口的窗口地址写入该客户端的空白数据结构当中,由于系统一开始便会创建4个空白的客户端数据管理结构,因此只有在有客户请求之后对应的客户端数据管理结构才会实例化,虽然客户端所请求的窗口在内存中会实例化,但不会在服务器的显示界面上显示,而是永远处于内存运行状态;
③ 通过该客户端数据管理结构取得该客户端请求的窗口页面指针,通过内存拷屏技术将内存中的页面拷贝下来,组成一幅bmp格式的图片数据存储在客户端数据管理结构中;
④ 利用GDI控件将bmp格式的图片数据压缩为jpg格式的图片数据;
⑤ 客户 端所需数据抓取器定时从客户端数据管理结构中获取jpg格式的图片数据,并通过网络命令解析器发送给客户端。
图2 初始化状态下数据信息的产生流程图
(2) 客户端命令状态下数据信息的产生流程见图3,分为以下几个步骤:
① 判断此次请求是否是该客户端的第一次请求;
② 若该请求不是客户端第一次请求,则解析客户端命令,获取客户端身份信息和命令信息;
③ 获取身份信息之后,从客户端数据管理结构中提取出相应客户端的信息,同时取出相对应的菜单栏页面,主显示页面的内存页面地址,并将命令信息输入这2个页面的内存地址中;
④ 内存页面中处理输入命令,如界面之间的切换、新建、删除及界面的鼠标点击操作等;
⑤ 通过该客户端数据管理结构取得该客户端请求的窗口页面指针,通过内存拷屏技术将内存中的页面拷贝下来组成bmp格式的图片数据,并将其存储在客户端数据管理结构中;
⑥ 利用GDI控件将bmp格式的图片数据压缩为jpg格式的图片数据;
⑦ 客户端所需数据抓取器定时从客户端数据管理结构中获取jpg格式的图片数据,并通过网络命令解析器将其发送给客户端。
图3 客户端命令状态下数据信息的产生流程图
2.1.4客户端所需数据抓取器与客户端数据定时发送器
客户端所需数据抓取器会从内存页面中将画面数据抓出,而客户端数据定时发送器则根据客户端的刷新频率将画面数据发送给客户端。
2.2客户端功能模块
客户端功能模块主要有请求、命令发送以及数据显示等3个功能。
2.2.1客户端连接命令发送
客户端与服务器首次连接时,将自身的IP信息和首次连接标志发送给服务器端。
2.2.2客户端鼠标点击命令发送
客户端与服务器连接之后,客户端即可向服务器远程发送操作命令,以获得自身想要的数据。命令包括画面的切换和画面中可操作元素的操作,如鼠标点击等命令。
2.2.3客户端接收数据,全屏适应显示
客户端从服务器中获得的数据,其实是一张该客户端想要获取的页面的jpg格式的截图。将该图片数
据在客户端中全屏显示,就可以看到从服务器端传回的数据了。
随着手持移动设备不断发展,客户端除了可在固定的机器上查看服务器状态之外,支持手持移动设备也是未来的趋势之一。
客户端程序想要支持更多的设备平台,采用Qt来编写程序是一种简单、可靠的方法。Qt是一个跨平台的C++图形用户界面应用程序框架,最大的特点是一次编写、随处编译。也就是说,程序的编码只需要编写一次,想要移植不同的系统平台只需要安装该系统的开发支持包并重新编译生成文件即可运行。
综上所述,监控软件跨平台远程客户端在不需要二次编写服务器端显示界面控件程序的前提下,可多客户间互不影响地同时访问服务器,访问机制灵活、简单、可靠;同时若是采用Qt编写程序,还可支持多种系统间的移植。可以说,采用这种机制的客户端仅需一次编写且可通用于不同的项目,对于实际生产工作有很大的作用。
[1]侯馨光.上海船舶运输科学研究所机舱自动化技术的新进展[J].上海船舶运输科学研究所学报,2012,35(2):4-15.
[2]L.Jean J.MicroC/OS-II the Real-Time Kernel[M]. 北京:北京航天航空大学出版社,2003.
Design of the Remote Client in Monitoring Software
LIN Jianfeng1,YANG Yupeng2
(1.NavalPowerStationAuxiliaryEquipmentPlantMilitaryRepresentativeOfficeinShanghai,200090,China;2.StateKeyLaboratoryofNavigationandSafetyTechnology,ShanghaiShip&ShippingResearchInstitute,Shanghai200135,China)
An operationally simplified monitoring software client is developed for eliminating wasteful duplication of coding effort. The server is improved to implement the client command parsing, windows memory page management for windows, memory duplication, and picture format stream conversion so that the client can retrieve and display data from the server without coding. Moreover, multiple clients is allowed to access the server at the same time without interfering the operation of the servers, thanks to the multiple thread programming. This system greatly reduces the workload of the client system. With the Qt cross-platform programming environment, the client can work on the platforms other than Windows, such as Linux or Android as well without recoding.
client; memory copy; cross-platform
2015-10-28
林剑峰(1965—),男,浙江宁波人,高级工程师,主要从事机电及核电工作。
1674-5949(2016)01-040-04
TP277.2;TP311.52
A