摘要:针对B/S架构的Web应用程序对用户个性化的操作系统环境的访问权限较低的需求,提出基于C/S架构的客户端嵌入浏览器的系统的设计方案。结合C/S架构客户端、B/S架构Web应用的信息交互的特点,探讨客户端系统的开发方法。介绍了系统架构设计与客户端设计,然后采用Java技术开发出Web服务器端软件、C++应用程序开发框架QT开发PC客户端软件。基于C/S架构客户端嵌入浏览器的系统已经完成,结果表明解决问题的措施可行,系统为用户提供了便利。
关键词:C/S架构;B/S架构; QWebkit;NW.js;Electron;XP SP2;
1.引言
C/S架构客户端应用从Windows诞生以来,一直占领着用户的桌面。随着90年代末期互联网的爆发使得Web应用成为了主流,它的轻量级、易用性、用户交互界面更友好,使得它逐渐取代了客户端在用户桌面的地位,目前互联网公司及企业内部建立的业务系统都是以Web应用为主,它对用户环境的要求更低,依赖性更小,它主要依赖于用户使用的浏览器,浏览器的局限性是当需要调用用户操作系统的功能时,如:获取CPU使用情况、获取用户操作系统环境信息、用户软件安装情况、访问用户注册表信息等功能时,浏览器则无权去获取这些信息。
目前国内优秀的平台类系统普遍采用客户端模式,其客户端应用均采用C++语言进行开发,如国内的360(C++)、迅雷(Microsoft Visual C++开发、BLOT界面引擎)、腾讯的QQ(Microsoft Visual C++开发)、国外的OICQ(C++)等软件,其产品中均集成了Webkit或Chrome内核浏览器的完成部分B/S架构的重要功能,如:QQ秀、360的软件管理,并且已经得到了广泛的应用。
优缺点对比 C/S架构 B/S架构
部署 较困难 方便
升级 较困难 方便
对客户端的控制权限 高 低
数据实时性 高 较高
通信效率 高 较高
跨平台性 弱 强
表1 C/S架构、B/S架构优缺点对比
2.系统目标和需求分析
本文从浏览器自动化入手,研究基于C/S架构客户端嵌入B/S架构的业务系统的相关开发技术,旨在提高浏览器在客户端运行时提高权限;实现B/S架构的业务系统通过C/S架构客户端嵌入的浏览器进行通信,实现B/S架构业务系统能够达到C/S架构客户端的用户体验效果,根据需求,对系统进行分析,由以下工作组成:
(1)C/S架构客户端操作系统最低支持操作系统版本 XP SP2。
(2)支持使用客户端本地安装的IE或客户端内置的Chrome内核浏览器打开业务系统集成的系统。
(3)实现用户登录状态与原有运行IE的 用户状态隔离。
(4)支持使用Chrome内核浏览器加载业务系统。
(5)获取用户本地安装软件信息,获取客户端的CPU、磁盘占用情况。
3.系统的架构设计
图1 统一工作台系统架构图
系统架构采用C/S架构客户端嵌入B/S架构的业务系统。业务系统主页采用客户端嵌入的Chrome内核浏览器呈现,业务系统通过Chrome内核浏览器定义的Javascript对象进行通信,来进行信息交互。
图 2 统一工作台系统开发框架
系统开发框架客户端采用C++应用程序开发框架QT进行开发,多分辨率支持,支持Windows XP SP2,相较传统WinForm技术,界面设计更美观,IE浏览器自动化采用微软COM对象提供的接口、Chrome内核浏览器采用QT开发框架的QWebkit组件。B/S服务器端业务系统采用Java语言的SSH框架进行开发,后台数据库采用Oracle数据库。
图 3 软件功能结构图
4.系统核心功能的实现
4.1 IE浏览器的创建与控制
随着互联网应用的发展,浏览器的市场占有率也在不断发生变化,Chrome浏览器后来居上,市场占有率不断增加,但是IE有着悠久的历史,众多企业内部系统都以支持IE为标准建成,还有很多插件仅支持特定版本的IE,限于以上需求在此采用IE COM对象使用用户本地IE浏览器访问业务系统。“InternetExplorer.Application” 是微软为开发者提供的InternetExplorer对象,可以通过它来自动化控制Windows Internet Explorer的实例,该对象提供了以下接口:
//以下为示例代码
//创建IE对象
SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer();
object Empty = 0;
object URL = "https://www.baidu.com";
//控制IE对象进行跳转
IE.Navigate(ref URL, ref Empty, ref Empty, ref Empty, ref Empty);
//控制IE对象打开新窗口
IE.Navigate2(ref URL, ref Empty, ref Empty, ref Empty, ref Empty);
//IE文档加载完成后事件
IE.DocumentComplete+=IE_DocumentComplete;
void IE_DocumentComplete(object obj1,ref object obj2)
{
//Todo: IE加载完成后相关操作
……
}
通过调用以上接口,实现对IE的自动化控制,完成IE的自动跳转、自动打开新窗口、自动填写表单等系统需要的功能。
4.2 Chrome内核浏览器的集成
B/S系统的前端页面为单页面应用程序,采用HTML5开发,交互性较强,鉴于IE低版本对HTML5支持较差,所以采用Chrome内核浏览器。Chrome浏览器最早是Google基于开源项目WebKit的分支Blink进行的继续开发的,QWebkit是QT封装的Webkit内核浏览器组件,为调用者提供了丰富的调用接口。
对于目前比较成熟客户端内嵌浏览器的开发框架NW.js、Electron都是基于Chrome内核的浏览器进行开发,但它们都存在不支持Windows XP操作系统,基于本项目的需求,故未采用以上开发框架进行开发。
本项目采用的是QWebkit组件,进行的开发,同时对该组件一些不完善的接口进行在封装和完善,使其对HTML5的支持更好。
4.3 C/S客户端与B/S业务系统通信
C/S客户端与B/S业务系统需要进行信息交互,如客户端版本信息、客户电脑配置信息、客户端运行资源占用情况、客户机软件安装情况、调用客户机器安装软件等等,均需要C/S客户端与B/S业务系统进行信息交互。信息交互的实现方式采用客户端定义 Javascript全局对象,B/S架构业务系统通过调用该对象定义的方法,向客户端传递消息。客户端可以通过直接调用B/S业务系统的Javascript方法向业务系统传递消息,业务系统收到消息后执行相应处理。
C/S发送消息到B/S,消息内容如下:
1、 发送客户机本地软件安装列表;
2、 发送客户端当前版本信息;
3、 发送登录用户信息;
4、 发送用户退出信息;
5、 发送客户机安装的操作系统信息、客户端资源占用信息CPU、磁盘等;
B/S发送消息到C/S,消息内容如下:
1、 发送打开某个本机已安装软件信息;
2、 发送设置客户端开机自启动信息;
3、 发送使用IE打开业务系统信息;
4、 发送使用Chrome打开业务系统信息;
5、 发送使用IE跳转到指定URL信息;
5. 结论
针对B/S架构的Web应用程序对用户个性化的操作系统环境的访问权限较低的需求,结合IE自动化、Chrome内核浏览器封装技术,本文设计并实现基于C/S架构客户端嵌入B/S架构系统。系统采用C++应用程序开发框架QT开发C/S架构客户端,Java开发B/S架构业务系统,使用操作系统IE COM对象实现IE自动化,使用Chrome内核浏览器展现业务系统并实现C/S与B/S通信。系统上线后测试后发现整个系统运行流畅,在实际应用过程中可以有效地提高B/S业务系统的用户体验,功能满足用户提出的开发需求。
参考文献:
[1] https://msdn.microsoft.com/zh-cn/library/aa752084(v=vs.85).aspx
[2] http://www.awesomium.com/support