网关代理(Gateway Proxy )是代理服务器的一种,他只针对网关提供代理服务,它是对URL从一个万维网浏览器例如Mosaic到一个外部服务器和返回结果传递一个请求的系统。
代理和网关的区别:
代理服务器就你通过它来上网的服务器,可以帮你连接到Internet上。
网关就是你要访问另一个网络时,首先需要访问的网络节点。比喻你有两个不同的内网,在A网中要访问B网,则首先需要访问网关,由它那里路由转发。
所以,代理服务器可以说是一个网关,但网关并不一定是代理服务器。
thingsboard与tb-gateway的关系
在thingsboard(以下简称TB)中,TB中创建的设备和网关,为虚拟的,不是现实中的真实设备和网关。所以,需要与现实设备或者网关连接时,我们需要用代理来连接虚拟与现实的设备和网关。这里tb-gateway就起到了这个作用。
为什么使用网关?
在现实场景中,我们连接真实设备时,分为两种情况:
1、单个设备:单个设备或者少量设备去情况下,我们连接真实硬件设备时,只需要用一些协议的硬件代理就可以连接虚拟设备了,而不需要将设备的数据通过网关来连接虚拟设备。
2、大批量设备:当现实中存在大批量的设备,如成千上万真实设备时,用单个设备连接的方法连接和维护设备时,就会出现维护成本特别大的问题,这里网关就解决了这个问题,我们只需要将硬件设备连接到网关上面,所有的硬件设备通过网关来连接虚拟设备,并且将不同类型的设备通过不同类型的网关连接虚拟平台,这样连接和维护的成本就会降到最低,而且方便设备的管理。
上面说的这两种理解方法只是比较浅显的,要说的比较深的话,就比较麻烦,这里深一点的东西我就不讲了,这些需要你们自己去探究,而且网关这个东西不只是我说的这么浅显。先这么做个基本的理解就行了。
根据上面的基本解释,大家应该理解网关代理的重要性了,在TB中,由于官方提供了一个基础的网关代理——tb-gateway。
不同厂商的硬件设备,可能连接设备的协议与解码方式不同,常见的协议比如modbus、mqtt、http和opc ua等,官网给的tb-gateway中已经给出了解码方式,具体代码请查看tb-gateway的源码。
但是在tb-gateway的源码中,我们发现只有这几种解码方式或者协议,如modbus的tcp中,官方给的解码方式只有大端和小端两种,而没有负数补码IEEE等解码方式,所以我们需要将这些tb-gateway中没有的编解码方式加到tb-gateway中。这样就避免我们自己再单独开发一个网关代理的麻烦。
这里,我举一个简单的例子,比如我们需要添加一个modbusTCP中32位的IEEE754解码方式,我们只需要修改tb-gateway中的两处代码:
1、定义一个解码方式:
2、添加解码方法:
这里我做的IEEE解码后的数据为保留四位有效数据的浮点数,具体代码不贴了,能理解这种添加解码方式的方法就可以了。
通过网关添加设备时,未修改的tb-gateway和TB连接并且创建设备时,我们发现,若是设备名称和设备类型为中文时,真正创建的TB中的虚拟设备的设备类型和名称为中文乱码。并且创建的任何的设备的设备类型为“default”。
这两个问题若是看过tb-gateway和TB代码的朋友应该知道原因。具体有三方面:
1、tb-gateway和TB中的中文解码方式不对;
2、tb-gateway中设备类型这块的代码有个大BUG,导致设备类型为“default”;
3、TB中未将设备连接和网关连接的代码做区分。
解决方法很简单,修改两个项目的源码。具体代码不贴了,太麻烦,截个图,你们能看懂就行。
tb-gateway代理修改如下:
修改tb-gateway中文乱码问题:
修改TB网关中文乱码问题:
修改的代码大概就上面这些,可能没有截全,能看懂就行。
给TB群里的小伙伴们再次贴一下这篇文章,我说话比较直,希望大家不要介意~
https://www.cnkirito.moe/thinging-in-ask/
再次推荐一下TB群:
目前群成员已达到四百人,希望大家共同进步!互勉~