一、为何使用CB/S架构
- 本人做VC++开发已有多年,最大的感受就是MFC界面太丑、UI界面库调用繁琐(技术有效个人看法-因为界面库是基于DirectUI技术都不支持独立窗口句柄,用于事件接受/GDI绘图/等等非常不方便,比如:DULIB/SOUI/炫彩界面库)、需要美工(小公司成本有限)、客户端升级麻烦(需要兼容各个系统版本)。。。等等,算了不吐槽了!!
- 可能大家问了,为神马不使用C#等界面开发呢,主要是考虑到要兼容各个系统版本,需要安装.NET环境比较麻烦,如果用于自助终端等环境比较单一的项目还是不错的。
- 为了解决界面美观、更新方便、旧项目改造方便等问题,我决定使用CB/S架构来解决以上问题,我采用MFC+谷歌浏览器CEF3实现CB/S架构,因为目前公司客户端都是MFC框架,所以方便快速替换旧版本客户端。
三、CB/S架构实现
由于CEF3支持C++与JS互相调用,所以客户端只需要实现一个js调用c++的通用接口就行,参数可以通过json结构数据控制实现不同的功能和传递不同类型参数。
1、c++调用js非常简单,直接调用js函数就行
如:c++调用
如:js接受函数
2、JS调用c++,比较麻烦,可以参考(https://blog.csdn.net/foruok/article/details/50573612)
根据个人喜好,本人只实现一个CMDFunction接口,通过json参数控制实现不同的功能。
如:JS调用
如:C++接受并实现(V8引擎接受到CMDFunction函数的参数后,发生到主窗口处理json数据并实现对应功能即可)
最终结果如下:
二:介绍CB/S架构(参考:https://www.cnblogs.com/liulun/p/3433003.html,写的非常好)
1.何为CB/S的应用程序
C/S结构的应用程序,是客户端/服务端形式的应用程序,这种应用程序要在客户电脑上安装一个程序,客户使用这个程序与服务端通信,完成一定的操作。
B/S结构的应用程序,是浏览器/服务端形式的应用程序,这种应用程序不用在客户端部署任何东西,客户只需要通过浏览器与服务端通信,来完成一定的操作。
两种类型的程序优缺点对比:
对比内容 |
C/S结构的应用程序 |
B/S结构的应用程序 |
部署 |
较困难 |
方便 |
升级 |
较困难 |
方便 |
对客户端的控制权限 |
高 |
低 |
数据实时性 |
高 |
较高 |
通信效率 |
高 |
较高 |
跨平台性 |
弱 |
强 |
由上可知,两种形式的应用程序各有利弊。架构师在做技术选型的时候,往往会根据项目需要,对比这两种技术形式的优缺点,做出正确的选择。
然而,国内大多数企业应用程序,需要频繁、及时的更新升级、需要更高的客户端控制权限、需要更高的数据实时性和更高的通信效率,但却不在意部署上的问题。
这时,架构师就考虑把C/S结构的应用程序和B/S结构的应用程序结合起来,让客户端嵌套一个浏览器以与服务器通信,完成一定的操作。这样的程序就是CB/S结构的应用程序。
这样做的好处是一般的业务逻辑只要在服务端更新升级,即可体现在客户端。对于客户端系统权限、基于Socket的通信等浏览器核心无法完成的操作,可以由客户端来完成。客户端可以直接与服务端通信,也可以通过浏览器核心与服务端通信。
下图为CB/S结构应用程序的基本示意图:
目前还有一种介于C/S和B/S结构的应用程序之间的应用程序:RIA富互联网应用程序,这种结构的应用程序一般都是基于浏览器插件来运行的,它有较高的客户端控制权限(比B/S程序高,但比C/S程序低),通信方式也有较多的选择(不只是基于HTTP协议),目前较常见的RIA技术有:Adobe的flex技术、微软的Silverlight技术、Oracle的WebStart技术。架构师在做技术选型的时候,也可以综合权衡采用这些技术。 |
本人QQ:1255033066
欢迎指导