前言

先说一下场景需求:
1、远程ssh访问设备,但是设备端不具备公网访问能力。
2、物联网采集网关,通过4G连接外网,网关部署在项目现场,我们不知道网关的IP,就算知道,网络链路也不通。对于网关的远程调试和运维都无法进行。
目前的解决方案:
1、通过SD-WAN技术,设备与设备之间打通隧道。
2、通过VPN,本地部署VPN服务器,实现VPN专网。
3、采用阿里云/华为云边缘计算解决方案,设备连接到阿里云/华为云边缘平台,实现远程运维、调试。

现有方案优缺点

1、SD-WAN技术,需要配备SD-WAN软件或硬件,对于企业用户是合适的。但是设备厂商并不合适。
2、采用VPN,如果是运营商VPN,成本昂贵,如果是私有部署VPN,部署相对专业,我没有部署过,不过有一定的专业门槛。
3、使用公有云提供的边缘计算方案,相当于要捆绑公有云,有不小的学习成本。
综上,上述方案的优点简单的说就是方案成熟,稳定,缺点就是要花钱买钱和不少人力。

工程师方案

上面的方案是基于外部力量实现的,对于稍微有些能力的开发者而言,也是有少花钱的解决方案的,简单的说,就是在一台公网服务器上,部署一个自己开发的 隧道转发 应用程序,设备通过 自己开发的应用程序来建立隧道,进而实现转发,流转。这种方案,理论上可行,稍微有点网络基础的人就知道,背后的工作量巨大,光是稳定性这块就很难保证,就更不用提多并发管理了。

MQTT Broker转发方案

上面所有的方案,基本上都是要实现一个中转站,上面提到的工程师方案的难点和缺点是,一般人很难开发出稳定、高可用、并发的中转服务器。那么如果有个 现成的、方便部署、稳定、可靠的中转服务器呢,是否就能解决问题了呢,答案是:yes,有这样的方案。
关于MQTT的通信协议,可以看我之前关于MQTT的系列文章:
《MQTT协议详解及开发教程(一)MQTT协议概述》, 这里就不赘述了。解决方案如下:

我们以MQTT Broker EMQx为例,网关和远程调试工具作为mqtt client, 通过2个topic:up和down

  • 配置工具想要发送命令,则publis消息到 down topic, 网关订阅down topic,收到命令,对命令进行解析并执行,然后返回消息,publis消息到up topic,而配置工具订阅up topic,收到返回数据。

这种方案,实现了一种通过Broker搭建隧道,实现数据中转。

优点

可能有些不熟悉MQTT协议的人会觉得,该方案好像也不过如此啊,原理貌似懂,但是干的事儿好像也不少啊,其实不然,这种方案有很多优点:
1、MQTT是物联网领域的通用标准,不管是阿里云物联网、还是华为IOT,还是其他公司的IOT,基本上都是通过MQTT协议,可以说MQTT已经是物联网领域事实上的标准了,标准的优点就是方便,支持多,资料多。
2、MQTT Broker部署非常方便,以EMQx为例,只需要一台服务器,不管是windows还是linux,部署非常方便,几乎不要什么专业知识。
3、MQTT Broker可选择对象多,EMQx、Apoll等等。
4、开源、免费、稳定,除非要求完善、高质量的服务,一般的知名开源Broker都是免费试用的,关键是非常稳定。

其他工作量

有了MQTT Broker的帮助,对于开发者,我们再也不用干数据转发、打通隧道这种专业性强、复杂的活儿了,我们只需要针对我们自己的应用需求,做MQTT消息的解析即可。

小结

经过测试验证,该方案可以实现:

  • JSON、ASCII码等字符串转发,所以理论上可以实现 ssh模拟。
  • 字节、数值、十六进制数值的转发,所以可以实现远程功能调试,比如Modbus。
  • MQTT支持字节流转发,也就是支持文件传输,实现文件的转发,类似于xftp。

该方案稳定、部署方便,用户只需要关注自己的业务应用即可,目前了解到,一些物联网关(中电网关)就是通过该方案实现的远程调试、下载、上载功能。

一种通过MQTT Broker实现远程调试、创建网络隧道的解决方案相关推荐

  1. APP远程调试及网络自动化测试

    一:优测 腾讯旗下的测试服务 http://utest.qq.com/ 二:云测 http://www.testin.cn/ 三:testbird 1.进入这个网站,注册并且登录 https://dt ...

  2. core部署iis的 调试net_远程调试远程 IIS 计算机上的 ASP.NET Core - Visual Studio | Microsoft Docs...

    在 Visual Studio 中远程调试远程 IIS 计算机上的 ASP.NET CoreRemote Debug ASP.NET Core on a Remote IIS Computer in ...

  3. Android远程调试的探索与实现

    作为移动开发者,最头疼的莫过于遇到产品上线以后出现了Bug,但是本地开发环境又无法复现的情况.常见的调查线上棘手问题方式大概如下: 方法 优点 缺点 联系用户安装已添加测试日志的APK 方便定位问题 ...

  4. Android微信动态调试,Android远程调试的探索与实现

    作为移动开发者,最头疼的莫过于遇到产品上线以后出现了Bug,但是本地开发环境又无法复现的情况.常见的调查线上棘手问题方式大概如下:方法优点缺点联系用户安装已添加测试日志的APK方便定位问题需要用户积极 ...

  5. 基于Goland和dlv远程调试Kubernetes组件

    一个正常运行的 Kubernetes 集群包含以下的各种组件. 通常开发者日常编码都基于Windows/Mac上的IDE(VsCode/Goland),编码完成后再部署到远端Linux机器运行.因此, ...

  6. ASP.NET Core远程调试

    关于ASP.NET Core远程调试的具体做法可参考微软文档--Remote Debug ASP.NET Core on a Remote IIS Computer in Visual Studio ...

  7. ssh本地端口转发,远程端口转发,隧道(这个解释不饶)

    目录 创建隧道时的常用选项 本地端口转发 命令 原理 远程转发 命令 原理 隧道 命令 创建隧道时的常用选项 "-L选项":表示使用本地端口转发创建ssh隧道 "-R选项 ...

  8. Eclipse远程调试Java代码的三种方法

    Eclipse远程调试Java代码的三种方法, 第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试, 第2种方法可以调试Java程序启动过程,但是Ecli ...

  9. eclipse远程调试两种模式

    2019独角兽企业重金招聘Python工程师标准>>> eclipse远程调试两种模式: 一.服务端监听 (1)服务器端需执行程序前加参数  -Xdebug -Xrunjdwp:tr ...

最新文章

  1. 调用加了SSL签名的WebService
  2. 支付宝sdk 支付订单查询失败
  3. 玩机器学习,能不知道它?
  4. 使用工具ngrok 实现内网穿透(免费)
  5. 在后台Service中直接启动Activity
  6. 图像匹配,基于深度学习DenseNet实现以图搜图功能
  7. 基于UDS协议的Bootloader
  8. mongodb中的3t客户端的时间延长做法
  9. 用graphviz画树状图(pdf、png)
  10. 软件需求工程 高校教学平台 测试计划
  11. 开学送礼最佳选择,有名的蓝牙耳机推荐
  12. cloudfare dns_Cloudflare配置动态dns(ddns)
  13. modbus的使用说明——个人使用心得
  14. 鼠标放上去,变成小手状
  15. 【java并发探赜索隐】判断标志、死锁、守护进程
  16. c语言*p1 什么意思,p1什么意思_p1,意思_词汇大全意思全集
  17. sha算法 哈希算法_SHA1哈希算法教程及其用法示例
  18. 使用echarts绘制地图、线图(飞行路线图)时需要的json资源
  19. 大功率电机驱动芯片VNH5019A电机驱动方案(替代BTN7971B)含原理图,ROS电机驱动器
  20. 深入解读神策分析云两大闭环,助力企业全面数字化转型应用

热门文章

  1. android 换肤探索(一) 手把手做一个皮肤包
  2. 虚拟机玩DNF提示图标系统组建失败怎么办
  3. SwiftUI中实现旋转倒计时动画
  4. 用于跑深度学习的嵌入式硬件平台资料整理(二)
  5. 普歌 - SpringSecurity入门(1)
  6. VUE整合VUE-PRINT-NB实现前端打印功能
  7. 高等数学:第十二章 微分方程(3)高阶线性微分方程、二阶常系数齐次线性微分方程
  8. 传智播客网络营销系列课程-新媒体运营全集
  9. 谷歌浏览器安装Vue Devtools
  10. 卡西欧科学计算机app,卡西欧CASIO计算器