[ 首頁 / 搜尋 / 管理Discord ] [ Komica首頁 ] [ 跨版面 ] [ 雜談 / / 攝影 / 運動 ] [ 人工智慧 / 程設交流 ] [ 蔚藍檔案 / 英雄聯盟 / 米哈遊 / Minecraft / 魔物獵人 / 勝利女神:妮姬 / Pokémon / 刀劍亂舞 / Unlight ]

/cs/ - 程設交流

Computer science
名稱
Email
主題
回覆
檔案
嵌入
Options
密碼 (用來刪除檔案。)
  • Allowed file types:jpg, jpeg, png, gif, mp4, webm
  • Max filesize is 10 MB.
  • Max image dimensions are 10000 x 10000.
  • You may upload 1 per post.

  [Go to bottom]   [Catalog]   [返回]   [Archive]   [Featured]

File: 1728194681324.png (120.21 KB, 1024x351, 未命名設計-3-1.png)

b684b896 No.217

想問一下,MQTT的Topic應該是不算太重要的吧?
以我自己對MQTT的理解,
Broker本身應該不重視自己上面到底有幾個Topic。

最近比較閒,突然想起之前遇過一個專案是把MQTT當成HTTP在用。
收跟發各一個Topic, AAA / 收、AAA / 發這樣。
大概像這樣:

GetShoppingCart / Requests:伺服器監聽Requests,並且發佈到Responds。
GetShoppingCart / Responds

訊息大概像:
{
User: AAAA
RequestID :XXXXXX
}

Responds :
{
User: AAAA
RequestID :XXXXXX
ShoppingCart : [
{item}, {item}, {item}
]
}

https://resource.webduino.io/blog/mqtt-guide

但是根據我找到的MQTT Best Practice ,Topic這東西應該是很低價的吧?

照上面的案例,其實應該可以改成:

伺服器監聽 GetShoppingCart / # / Request
然後Publish到:GetShoppingCart / {UserID} / Response 吧。
上下行電文結構都同上。

但是被說這樣會導致Topic數量過度增加。
MQTT這東西的強項不就是不用事先定義路由,想Publish就Publish,沒人聽就沒人聽嗎?

像是今天居家環境,原本擺了四個感測器:HOME/SENSOR1~4
結過現在又多了四個,不用重新設定,請他Publish到
HOME/SENSOR5~8,我接收資料的伺服器這邊只要監聽HOME/#
就全部監聽到,管你接多少個感測器。

島島我是不是搞錯甚麼了,
另外一個題外話是,找到文章說MQTT是「穩定且可靠」的協議,
但是不太懂為什麼一個控制訊息最小只有兩個Byte的協議會穩定且可靠,是指其他意義上的可靠嗎?

5a196b9f No.218

>>217
穩定可靠是指MQTT輕量化和QoS的設計吧
傳輸資料越小越能應付那些網路環境跟屎一樣的場域
QoS就看實際需求設定彈性不錯

709ab1a9 No.219

>>218

也在想是不是這樣,
感覺現在一堆人整天想把MQTT用到一般網站上根本有問題。
開宗明義都說這東西不保證送達也不保證不會重複傳送了。

不過進了鬼屋也只能當鬼。
還是很在意我自己的理解對不對。

Broker本身應該不會暫存任何Topic吧?
以一般即時通訊來看,每一個通訊頻道都是一個主題應該是沒問題的吧?

類似這樣:
Chat / {RoomNumber} / Public
Chat / {RoomNumber} / Files
Chat / {RoomNumber} / {USER} / Mension

一直覺得應該是這樣,但在公司這種想法直接被用了很多年MQTT的人打槍說
這樣會導致MQTT Topic 數量無限暴增。

467e392d No.220

>>219
Broker負責傳資料 不暫存
你這樣的架構的確會有topic數量過多的問題
修改方向從簡化結構開始?
例如Chat / RoomInfo / {Roomnumber} 把所有這個room的資料放一起
資料的處理由接收端負責
Chat / Mention / {RoomNumber} / {USER} 把分類放前面
不過資料量很大時應該也會有一些問題

不然就是實作動態清理沒在用的topic

b684b896 No.221

>>220
>>資料的處理由接收端負責
>> Chat / Mention / {RoomNumber} / {USER} 把分類放前面

好像有懂了一點甚麼…
這樣做的意思,是把判斷要做甚麼的任務交給APP去判斷的意思嗎?
例如說再回傳參數裡面多一個 action = 提及、一般訊息、xxx之類的。
程式裡面再跑switch-case 或 if-else。

之前那樣設計的想法,是想把程式裡面的switch/case 去掉,全部在topic上面清清楚楚。
收到通知的時候就知道要做甚麼。


>>不然就是實作動態清理沒在用的topic


這個就不太懂了,根據辜狗的結果,
頂多是在 clean session 沒有設定為 true的狀況下,
會把 QoS 不是只傳一次的訊息cache起來,等某種情況下再補傳遞而已。
Broker只負責傳訊息的話,應該是沒有清理的問題…吧
或者其實應該叫做清cache?

>>你這樣的架構的確會有topic數量過多的問題


所以說,問題其實不是 Chat / {RommNumber} / <功能>中的{RoomNumber} 部分,
而是 <功能> 的部分嗎?

公司的人一直給我一種 RoomNumber 才是導致Topic數量無限暴增(畢竟房間數量理論上沒有上限)
會大爆增的元凶的感覺。

591c7519 No.222

File: 1729405117955.jpg (272.37 KB, 1920x1080, 1729385751998.jpg)

>之前那樣設計的想法,是想把程式裡面的switch/case 去掉,全部在topic上面清清楚楚。

想設計object notation? 通常,人們會用checksum和代替switch來加速程式

Responds = dict(User = "AAAA", RequestID = "XXXXXX", ShoppingCart = [{1}, {2}, {3}])

try:
print(Responds)
x = Responds['ShoppingCart']
print(x)
except KeyError:
pass

8bda0b30 No.223

>>222

這啥?機翻?
不太懂你所謂的checksum取代switch是甚麼意思。
印象中throw的效能成本是非常高的。



[Go to top] [Catalog] [返回][Post a Reply]
刪除貼文 [ ]
[ 首頁 / 搜尋 / 管理Discord ] [ Komica首頁 ] [ 跨版面 ] [ 雜談 / / 攝影 / 運動 ] [ 人工智慧 / 程設交流 ] [ 蔚藍檔案 / 英雄聯盟 / 米哈遊 / Minecraft / 魔物獵人 / 勝利女神:妮姬 / Pokémon / 刀劍亂舞 / Unlight ]