程序员是如何开灯的 白话闲聊mqtt协议

-------------整理一下多年前的物联网开发笔记------------

事情从多年前说起

程序员酷爱把简单的问题复杂化

就拿开灯这件事来说

我的同事们使用过各种方式来开灯

最早电路常用红外感应开灯,人坐在灯前,灯就会亮

好神奇,然后你专心的看书,看着看着灯就灭了。。。

定时器开灯、遥控器开灯、噪音开灯、各种传感器开灯。。。

后来单片机接管开灯,更复杂了

密码开灯手势关灯,有时候需要特定的人脸配合

不过最流行的还属远程开关灯,因为这代表程序员的触手可以伸得无限远

很早的时候,我决定用最酷的方式开关灯

我买了一个linux开发板,写成了一台服务器,开发板的io口直接控制灯光开关,把端口暴露出来,通过路由器映射到外网

这样我可以在世界上任何一个地方,访问我自家的ip地址加上我暴露的端口号,就可以访问到自己的Linux开发板

然后控制自家的开关

很酷!!

打开灯! 好的 这看似简单的对话 不仅穿越了千山万水 还需要在有公网ip的路由器上 映射灯的IP暴露出端口号.

结果很快世界上的ipv4地址枯竭了,网络运营商收回了我的公网IP

我家灯的开关,被包裹在了层层的局域网之中,无法寻觅

以前我的灯是有公网IP的
后来我决定适应时代的发展,必须考虑开关所处环境没有公网IP的情况!

我买了一台云主机

我在云主机上写了一个网站

我的灯同样有一台开发板来管着

开发板每秒不停的去访问我的云主机上的网站

网站上内容只有一个数字

当数字是0的时候,开发板就把灯关掉

数字是1的时候,开发板就把灯打开

我还给网站写了个后台页面

后台页面只有一个按钮

按下去是1,再按下去会变成0

这样我就可以在世界上任何一个能访问我的网站的地方控制我的灯了

我真是天才!!!

云主机 我要不要打开? 等通知! 我要不要打开? 等通知! 。。。 我要不要打开? 等通知! 打开灯! 好的 我要不要打开? 打开! 我要不要打开? 打开! 。。。 关闭灯! 好的 我要不要打开? 关闭! 我要不要打开? 关闭! 。。。 云主机

在这里插入图片描述
在这里插入图片描述
可以用手机打开网页控制

还可以用电脑打开网页控制

贪玩的朋友觉得这样很酷

在我稍微改进了网站访问形式后

他邀请我用这种方案在家里布置了数十个开关

各种灯光,各种家电,都能控制

遗憾的是朋友经常会说在他家玩游戏不爽

经常会被卡掉线

与此同时,我的云主机好像也会经常卡顿。。。

有组织把这中风格的控制结构进行了一些优化和规范

名字叫做REST/HTTP

但这不是今天我开灯的重点

朋友打游戏习惯了,是个讲究人

鼠标点下去电脑就要有反应

这个习惯被带到了开灯中

灯泡刷网页内容确定自己是否要开关

总会比人操作开关慢那么一两秒

有时候还会是好几秒

经常这样 快把朋友逼疯了

为了提高开灯的反应速度

我开始考虑长连接

灯泡访问云主机就像打电话,不再是刷网页了

灯泡用TCP方式和云主机勾搭上之后

就没完没了的等主机回话

主机说你开灯

灯泡立马就开了
在这里插入图片描述

这反应速度

让我整个人都感觉高大上了

我的具体实现过程是这样的

我的灯和云主机勾搭上的时候

就自报家门,说,我是【某某某灯】,有要求冲我来

我的云主机就会记下来这个灯这么合理的要求

我想用手机控制灯,就在手机上也写了个程序

这样手机也和云主机勾搭上了,而且是勾搭上就不中断的那种

手机会告诉云主机,我要控制【某某某灯】,一定要替我搞定

可爱的云主机也采纳了手机的意见

我的云主机写了转发tcp数据的脚本程序

啥都不干,就管收到信息转发给合适的正在勾搭的另一个tcp会话

比如把手机来的要求控制【某某某灯】的信息转发给其他说过自己是【某某某灯】的tcp会话

于是手机上点开关的时候,云主机就马上告诉灯赶紧的行动

这简直太快了

云主机 你好 我是张三家的灯 知道了,别挂电话! 有啥要控制张三家的灯的指令,就跟我说 啰嗦 打开张三家的灯 开灯 关闭张三家的灯 关灯 云主机

我在内陆大山里的城市中

租用了沿海某云的主机
点了手机上的灯泡开关

也就一百多毫秒后,我满意的看到灯亮了

朋友也用着很爽

接着我让灯给云主机提了更多要求

灯每次开关的时候都会告诉云主机,我现在打开了,请转告【控制某某某灯的开关】

或是说,我现在关闭了,请告诉【控制某某某灯的开关】

我的手机和云主机勾搭上的时候,也会同时告诉云主机

我是【控制某某某灯的开关】,那灯有啥话一定转告我

这么来,我不在家时候,也可以在点手机上灯的开关时候知道灯的状态了

我真是天才!!!!

云主机 你好 我是张三家的灯 知道了,别挂电话! 有啥要控制张三家的灯的指令,就跟我说 废话 你好 我是张三家的灯的控制开关 知道了,别挂电话! 有啥话要给控制张三家的灯的控制开关讲,就跟我说 磨叽 打开张三家的灯 开灯 告诉张三家的灯的控制开关 我现在打开了 张三家的灯打开了 关闭张三家的灯 关灯 告诉张三家的灯的控制开关 我现在关闭了 张三家的灯关闭了 云主机

灯这下完美了!

我把灯做成了彩色的

给手机上的开关做成了其他样子

天天美得不要不要的

经常拿着手机到处显摆
在这里插入图片描述
在这里插入图片描述
直到有一天

我发现各大云主机开始推广了物联网服务器

而且物联网服务器支持一种协议,叫MQTT

那协议中把我的灯勾搭云主机的过程叫成了连接connect

把我的灯跟云主机提要求的过程叫成了订阅subscribe

把我的手机跟云主机要求传递控制灯泡信号的过程叫成了发布publish

把我的灯自报家门时候说的我是【某某某灯】这个名字叫成了主题topic

这么来灯汇报状态也是在向【控制某某某灯的开关】这个主题发布自己的状态信息了

这么来手机勾搭云主机时自报家门【控制某某某灯的开关】要求云主机帮灯传话

也是订阅【控制某某某灯的开关】这个主题的信息了

好有道理的样子

我竟然和IBM的思路不谋而合!

我真是个天才!!!!

不,事情一定不是这样的

一定是那群无良的专家抄袭了我的思想

尽管他们设计协议比我早了那么十几年

一定是的
太坏了,真是的

如果他们不设计这个协议

那能够拯救这个世界的人

一定是我!!

而各云厂商实现MQTT的时候

又加入了一些自己厂家的一些控制风格

比如鉴权

让灯勾搭云主机的时候

必须答得上“天王盖地虎”这句口令才给连接

厂家还写了用户管理、产品管理、设备管理等分级分组的一些逻辑

限定了很多主题的订阅和发布权限

简直太好用有木有

如果早几年我有这些云厂这么便利的技术支持

那我的灯光项目肯定火起来了有木有

没准我单用灯这个项目养一个公司

没准还能让我的公司上市了有木有

可是现在

为什么我会黯然神伤呢

————————完结的分割线———————

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值