程式設計師是如何開燈的 白話閒聊mqtt協議

2021-10-08 14:48:30 字數 3570 閱讀 5551

-------------整理一下多年前的物聯網開發筆記------------

事情從多年前說起

程式設計師酷愛把簡單的問題複雜化

就拿開燈這件事來說

我的同事們使用過各種方式來開燈

最早電路常用紅外感應開燈,人坐在燈前,燈就會亮

好神奇,然後你專心的看書,看著看著燈就滅了。。。

定時器開燈、遙控器開燈、噪音開燈、各種感測器開燈。。。

後來微控制器接管開燈,更複雜了

密碼開燈手勢關燈,有時候需要特定的人臉配合

不過最流行的還屬遠端開關燈,因為這代表程式設計師的觸手可以伸得無限遠

很早的時候,我決定用最酷的方式開關燈

我買了乙個linux開發板,寫成了一台伺服器,開發板的io口直接控制燈光開關,把埠暴露出來,通過路由器對映到外網

這樣我可以在世界上任何乙個地方,訪問我自家的ip位址加上我暴露的埠號,就可以訪問到自己的linux開發板

然後控制自家的開關

很酷!!

結果很快世界上的ipv4位址枯竭了,網路運營商收回了我的公網ip

我家燈的開關,被包裹在了層層的區域網之中,無法尋覓

後來我決定適應時代的發展,必須考慮開關所處環境沒有公網ip的情況!

我買了一台雲主機

我在雲主機上寫了乙個**

我的燈同樣有一台開發板來管著

開發板每秒不停的去訪問我的雲主機上的**

**上內容只有乙個數字

當數字是0的時候,開發板就把燈關掉

數字是1的時候,開發板就把燈開啟

我還給**寫了個後台頁面

後台頁面只有乙個按鈕

按下去是1,再按下去會變成0

這樣我就可以在世界上任何乙個能訪問我的**的地方控制我的燈了

我真是天才!!!

可以用手機開啟網頁控制

還可以用電腦開啟網頁控制

貪玩的朋友覺得這樣很酷

在我稍微改進了**訪問形式後

他邀請我用這種方案在家裡布置了數十個開關

各種燈光,各種家電,都能控制

遺憾的是朋友經常會說在他家玩遊戲不爽

經常會被卡掉線

與此同時,我的雲主機好像也會經常卡頓。。。

有組織把這中風格的控制結構進行了一些優化和規範

名字叫做rest/http

但這不是今天我開燈的重點

朋友打遊戲習慣了,是個講究人

滑鼠點下去電腦就要有反應

這個習慣被帶到了開燈中

燈泡刷網頁內容確定自己是否要開關

總會比人操作開關慢那麼一兩秒

有時候還會是好幾秒

經常這樣 快把朋友逼瘋了

為了提高開燈的反應速度

我開始考慮長連線

燈泡訪問雲主機就像打**,不再是刷網頁了

燈泡用tcp方式和雲主機勾搭上之後

就沒完沒了的等主機回話

主機說你開燈

燈泡立馬就開了

這反應速度

讓我整個人都感覺高大上了

我的具體實現過程是這樣的

我的燈和雲主機勾搭上的時候

就自報家門,說,我是【某某某燈】,有要求衝我來

我的雲主機就會記下來這個燈這麼合理的要求

我想用手機控制燈,就在手機上也寫了個程式

這樣手機也和雲主機勾搭上了,而且是勾搭上就不中斷的那種

手機會告訴雲主機,我要控制【某某某燈】,一定要替我搞定

可愛的雲主機也採納了手機的意見

我的雲主機寫了**tcp資料的指令碼程式

啥都不幹,就管收到資訊**給合適的正在勾搭的另乙個tcp會話

比如把手機來的要求控制【某某某燈】的資訊**給其他說過自己是【某某某燈】的tcp會話

於是手機上點開關的時候,雲主機就馬上告訴燈趕緊的行動

這簡直太快了

我在內陸大山里的城市中

租用了沿海某雲的主機

點了手機上的燈泡開關

也就一百多毫秒後,我滿意的看到燈亮了

朋友也用著很爽

接著我讓燈給雲主機提了更多要求

燈每次開關的時候都會告訴雲主機,我現在開啟了,請轉告【控制某某某燈的開關】

或是說,我現在關閉了,請告訴【控制某某某燈的開關】

我的手機和雲主機勾搭上的時候,也會同時告訴雲主機

我是【控制某某某燈的開關】,那燈有啥話一定轉告我

這麼來,我不在家時候,也可以在點手機上燈的開關時候知道燈的狀態了

我真是天才!!!!

燈這下完美了!

我把燈做成了彩色的

給手機上的開關做成了其他樣子

天天美得不要不要的

經常拿著手機到處顯擺

直到有一天

我發現各大雲主機開始推廣了物聯網伺服器

而且物聯網伺服器支援一種協議,叫mqtt

那協議中把我的燈勾搭雲主機的過程叫成了連線connect

把我的燈跟雲主機提要求的過程叫成了訂閱subscribe

把我的***雲主機要求傳遞控制燈泡訊號的過程叫成了發布publish

把我的燈自報家門時候說的我是【某某某燈】這個名字叫成了主題topic

這麼來燈匯報狀態也是在向【控制某某某燈的開關】這個主題發布自己的狀態資訊了

這麼來手機勾搭雲主機時自報家門【控制某某某燈的開關】要求雲主機幫燈傳話

也是訂閱【控制某某某燈的開關】這個主題的資訊了

好有道理的樣子

我竟然和ibm的思路不謀而合!

我真是個天才!!!!

不,事情一定不是這樣的

一定是那群無良的專家抄襲了我的思想

儘管他們設計協議比我早了那麼十幾年

一定是的

太壞了,真是的

如果他們不設計這個協議

那能夠拯救這個世界的人

一定是我!!

而各雲廠商實現mqtt的時候

又加入了一些自己廠家的一些控制風格

比如鑑權

讓燈勾搭雲主機的時候

必須答得上「天王蓋地虎」這句口令才給連線

廠家還寫了使用者管理、產品管理、裝置管理等分級分組的一些邏輯

限定了很多主題的訂閱和發布許可權

簡直太好用有木有

如果早幾年我有這些雲廠這麼便利的技術支援

那我的燈光專案肯定火起來了有木有

沒準我單用燈這個專案養乙個公司

沒準還能讓我的公司上市了有木有

可是現在

為什麼我會黯然神傷呢

————————完結的分割線———————

程式設計師是如何喝酒的

大家喝的是啤酒。這時你入座了。你給自己倒了杯可樂,這叫低配置。你給自已倒了杯啤酒,這叫標準配置。你給自己倒了杯茶水,這茶的顏色還跟啤酒一樣,這叫木馬。你給自己倒了杯可樂,還滴了幾滴醋,不僅顏色跟啤酒一樣,而且不冒熱氣還有泡泡,這叫超級木馬。你的同事給你倒了杯白酒,這叫推薦配置。人到齊了,酒席開始了。...

程式設計師是如何喝酒的

程式設計師是如何喝酒的 大家喝的是啤酒。這時你入座了。你給自己倒了杯可樂,這叫低配置。你給自已倒了杯啤酒,這叫標準配置。你給自己倒了杯茶水,這茶的顏色還跟啤酒一樣,這叫木馬。你給自己倒了杯可樂,還滴了幾滴醋,不僅顏色跟啤酒一樣,而且不冒熱氣還有泡泡,這叫超級木馬。你的同事給你倒了杯白酒,這叫推薦配置...

程式設計師是如何喝酒的

大家喝的是啤酒.這時你入座了.你給自己倒了杯可樂,這叫低配置.你給自已倒了杯啤酒,這叫標準配置.你給自己倒了杯茶水,這茶的顏色還跟啤酒一樣,這叫木馬.你給自己倒了杯可樂,還滴了幾滴醋,不僅顏色跟啤酒一樣,而且不冒熱氣還有泡泡,這叫超級木馬.你的同事給你倒了杯白酒,這叫推薦配置.人到齊了,酒席開始了....