网络寻租

Programmer, Gamer, Hacker

采用node-webkit进行C/S架构客户端设计

| Comments

2014年我在医院信息科工作, 医院需要一个通知系统用来进行信息的传达,于是我设计了一个客户端的信息通知系统, 同时整合有医院各大系统的启动器。

选型

我希望能够做把通知系统做成医院的统一化信息化入口,同时带有信息通讯,通知传达,监控等功能。 医院上上下下有无数的科室,科室里面的电脑操作系统各异(虽然都是windows),性能也一般(有很多老的电脑)。

我选择采用C/S架构而不是B/S架构,因为很多操作(开启另外的应用程序,后台监控)需要系统权限,不能用系统自带的浏览器完成。 考虑了各种GUI框架:包括Qt,PyQt,winform,MFC,html,最后选择了node-webkit,几个原因:

  • 我对前端这一块比较熟悉,用html用来进行内容展示比较容易实现。
  • 客户端电脑只有IE,并且版本不一,node-webkit可以统一浏览器环境,方便后续基于浏览器的应用导入。
  • node-webkit可以执行相当多的本地操作,包括开启应用程序,执行后台脚本,窗口控制等。
  • node-webkit经过测试,可以跑在我们医院各种旧电脑上,不会有很大的性能问题。

设计

启动器:客户端带有程序启动器的功能,限制用户必须采用该系统启动各种医院信息系统(原先都是用桌面快捷方式的方案)。 用了启动器,才能强制用户看到通知,另外也把各种启动的方法都汇总起来。 启动器可以自动化安装:点击了某信息系统,如果发现本地没有安装,就可以连接到服务器上面,拷贝下来自动化安装。 autoit可以实现自动化安装的功能。 启动器也可以提供一些帮助功能:比如显示电脑的IP地址,开启远程桌面,链接到文件服务器等,方便系统管理员处理问题。

通知系统:通知系统整合到启动器中,内嵌一个网页,链接到远程的Rails服务器,展示通知。 有需要发放通知的科室,可以根据信息科发放的账户,登录到服务器中,撰写通知,发布。各个客户端会定时轮询远端服务器, 如果有新的通知,就会弹出窗口。这样可以达到全院信息传达的目的。 同时通知历史都存储在服务器上面,所有客户端都可以查看历史通知,以及下载通知带有的附件文件。

启动性能:医院的部分信息系统采用delphi开发,使用者已经习惯系统的瞬间开启。 新一代的软件基本上都达不到这样的开启速度,更别说是node-webkit了。我让客户端开机启动,驻留在系统中, 用户点击开启触发程序窗口,达到快速开启的效果。

更新:客户端软件的更新是一个大问题。我采用的方法:定时监控一台远程服务器上面的某个文件, 如果发现远端有更新(根据版本判断),后台下载新的程序文件,自动重启。因为windows上面可执行文件不能修改自己, 客户端首先运行一个加载小程序:如果发现本地有更新程序,拷贝更新程序,再执行node-webnit程序。 这个加载小程序我用前面说的autoit编写,启动速度很快。

本地缓存:考虑到客户端同时具有系统启动器的功能,当远端的服务器出现问题,本地要能够保持正常使用。 启动器功能都整合在客户端之中,启动器的每个项目,用json格式描述,方便拓展。

心得

系统开发过程中,我应用了node-webkit和autoit,发现node-webkit性能还是不够好(webkit内存占用还是太高,开启速度不够), 以及用html/js开发会有一些不稳定因素(开启页面有的时候会不能正常工作)。autoit是很简陋的编程语言,不是很方便使用。

客户端导入过程:我跑了医院无数科室安装,零零散散耗时一个多星期。最后客户端的稳定性我还是很满意的。 最担心的问题是自动更新系统工作不正常造成所有客户端不能访问,需要重新安装。通知系统设计得简洁,用户使用上面没有什么问题。

还有后话:我在医院待了半年多就离职了,考虑到整体系统的维护成本,离职后我们就把这个系统废弃掉不再使用了。

Comments