1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

时间:2021-12-17 08:20:22

标签:

About Thrift:

本文并不是说明Thrift设计及道理的,直接拿Thrift来开发一个Demo措施,如果想要了解Thrift的细节,可以访谒官方网站:https://thrift.apache.org/ 官方的网站上除了介绍说明外,固然还有白皮书,详细的说明Thrift是干嘛用的。

简单的说,Thrift可以作为一其中间数据站,我们可以将数据丢到Thrift上,期待客户真个请求,而这个客户端可能是C#措施,固然也有可能是java措施,甚至是php,ruby,python等等,就像白皮书的介绍一样,一个灵活的,可伸缩的,多语言的处事集成。

About Demo:

关于本项目的意图,基于对Thrift简单的学习后,就想要拿个Demo进行练手,模拟一些实际的操纵,趁便测试测试一些对象,加强本身对Thrift的理解,才华判别这个技术是否真的适合你。

大抵介绍下本项目,本项目主体成果是,处事器端措施不竭的读取西门子PLC进行数据更新,并将数据刷新到Thrift,客户端挪用Thrift处事来访谒处事器的数据,除此之外,实现一个操纵,在客户端做一个按钮,点击按钮后,将一个数据(通过处事器措施中转)写入到PLC中,并返回是否写入告成的符号。

其他的成果就是测试测试连接不变性,网络重连机制的试验。

Getting Started

说了那么多,连忙开始吧,此处我的IDE时VS2017,先创建一个简单的winform项目吧。在这个解决方案里,共创建2个窗体措施,一个处事端,一个客户端,再创建一个库项目,用来生成客户端和处事器共用的代码处事。就像下面这样子

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

接下来我们既然要读取PLC的数据,使用Thrift技术。那么我们就要进行安置相关的插件撑持,我们在NuGet界面长进行安置两个插件,Thrift和HslCommunication,对付Thrift而言,三个项目都需要安置,对付HslCommunication只需要安置随处事器:

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

安置HslCommunication

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

OK,到这里为止,我们前期的筹备事情根基完成,接下来需要设计读取的数据和实现的成果,以这个为前提去设计Thrift的实现接口。

措施架构设计如下:

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

有了上述的根本设计后,接下来就是设计Thrift这一层但愿供给什么样子的接口操纵了,此处我们就举一些简单的例子,首先呢,设备不会只有一台,我们就假设有好多台设备,每台设备有如下参数信息:

设备的名称,我们给与string来存储

设备的独一ID,我们也给与string来存储

设备的IP地点,string存储

设备的运行状态,允许有多个状态,int存储

设备的报警状态,允许组合实现32种报警,int存储,每个位对应一种报警

设备的温度,double数据

设备的压力,double数据

然后在Thrift中,我们但愿果然的数据有获取单台设备的信息,也有针对报警中的统计信息。获取所有设备运行状态的json数据,所有设备报警状态的json数据,单独获取所有设备的温度数据,单独获取所有设备的压力值,最后再供给一个允许手动变动设备状态的接口,参考了官方的白皮书(地点为:https://thrift.apache.org/static/files/thrift-20070401.pdf),最终完成的Demo.thrift文件如下:

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

这个文件存放的目录不才面这个目录,和安置thrift的package目录一致:

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

接下来就是挪用上图中的thrift-0.9.1.exe来生成代码了,具体方法如下:

打开电脑的cmd指令(也就是命令提示符):

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

然后cd到上面的目录里去,指令为cd /d 目录,功效如下:

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

输入thrift-0.9.1.exe -help

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

ok,到这里为止,我们知道了怎么去生成C# 代码了:指令如下:thrift-0.9.1.exe --gen csharp Demo.thrift

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

然后我们就看到路径下多了一个文件夹

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

点进去后就是:

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

就是我们之前填写的信息生成的文件。接下来,把这两个文件添加到一开始我们创建的三个项目的Common项目中去:

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

1)){ShowMessage("写入成功!");}else{ShowMessage("写入失败!");}}privat

从头生成Common项目,OK,到这里为止,我们前期的任务都完成了,接下来就是真正写代码的时候了。

Server Implementation

在Server端要做的第一件事就是添加对Common项目生成的dll组件的引用,第二件事是创建一个类,担任Common项目中的一个接口:如下: