我们为客户开拓了一套监控系统,此系统有一个核心的软件,这个软件哀求支配在客户几十上百台的工控机里,而这些工控机分布在上百公里的范围内,但这些工控机已通过网络技能组成一个大的局域网,程序的运行是基于做事在后台运行。在传统的事情模式下,我们的履行工程师只能通过一些远程工具一台一台的分别支配,效率极其低下,同时当我们要拷贝程序的运行日志的时候,传统办法上我们也只能通过远程工具连上去一个个的***,效率依然很低下。在这种情形下,我决定为我们的现场履行职员开拓一个远程发布掩护的工具以减少他们的事情量。
3 架构远程发布工具架构图
如上图所示,全体工具包括两个模块,实在便是两个程序,分别是本地节点和远端节点。本地节点支配在履行职员自己的电脑上,远程节点支配在现场工控机里(常日是出厂前就支配好,开机自启)。本地节点与远端节点通过SOCKET保持长连接通信,然后本地节点实行干系的业务命令,然后将命令推送给远端节点,远端节点实行干系命令后并进行反馈,本地节点将反馈信息展示出来。详细实现的功能如上图所示,后面进行详细解释。
4 功能实现开拓措辞选择上实在没有限定,险些可以是任何措辞,而我选择了.net core,我当时选择版本是.net 6.0,缘故原由是它支持跨平台,可以同时在windows和linux上运行,同时它的性能非常好。当然你也可以选择c++或者rust来实现。
4.1 本地节点一个窗体程序,方便用户操作,包括如下功能:
项目管理:可以理解为每一个须要被发布或更新的程序,因此须要有一个项目管理的模块,这个项目你可以根据自己的需求配置一些项目属性,常日情形下有项目名、进程名、支配路径,启用命令等。为什么须要这些属性,缘故原由很大略,你这些属性都是将来远端节点实行命令时须要关注的点,比如远端节点须要知道程序支配在哪里,怎么启用等。末了这些项目信息可以选择保存本地序列化文件里也可以保存在数据库,比如sqllite小型数据库。
远端节点管理:本地节点管理须要先连接上远端节点建立通道后才能向远端节点发送干系的命令,因此须要进行管理。此模块可以添加、删除、导入展出远端节点的配置。远端节点的配置属性常日有IP、连接端口、登录密码。同时远端节也须要保存在本地,任何办法都可以。
发布程序:当本地节点与远端节点建立连接后,就可以批量选择多个远端节点进行任意项目的发布了。
参数修正:常日我们对发布的程序进行参数修恰是一个很正常的操作,这些地方你可以根据你自己程序的参数进行一个定制化操作,但这些的话就不通用,也可以针对常用程序的多种类型参数进行一个通用设置。
文件***:当我们须要***所发布程序的日志时,我也可以进行批量***。这里有几个办法可以选择,比如你可以直策应用本地与远真个TCP通道进行文件传输,也可以通过FTP。我这里利用的是FTP,本地可以安装一个FTP工具即可。远端节点实现FTP客户真个协议就可以完成文件上传的事情。
其它功能也是类似的办法,核心思想便是本地节点把每块业务封装成TCP通信报文,然后通报到远端节点。需把稳的是,本地节点与远端节点的通信报文协议须要自己去制订,这个比较大略,常日便是一个报文头,报文体,报文尾,然后你在报文头确定好个业务类型。
4.2 远端节点远端节点是一个后台做事程序,它紧张是吸收本地节点的命令然后实行干系操作。同时本地节点须要打开一个监听端口也方便本地节点连接。详细每个的功能实现也比较大略,比如说发布功能,便是按命令里的哀求将程序复制到指使目录即可。启用命令便是启动干系的实行文件,或者实行命令里的启用代码,这个地方要考虑下windows与linux下的命令办法可能不同。停滞命令在windows下便是找到相应的进程命令后杀掉即可。
5 结语
全体工具的架构解释便是这些,是不是以为很大略,事实上架构设计与大略的功能理解确实很大略,可能须要把稳的便是细节问题。比如说在界面如何供应一种更好的用户体验,每次操作的反馈是否能友好显示以方便确定是否操作成功。还有便是基于socket的操作,通过管理要做到断开友好提示,并主动重连等等。好吧,如果你有兴趣可以按这个思路去实现一个类似的工具吧。
如果你以为我的分享对你有帮助,请连续关注我吧,再次感谢!