我們計劃使用MQTT將消息從我們的服務器傳遞到Android設備 ,我們決定使用開源服務器mosquitto。可以使用MQTT來實現請求/響應行爲
在大多數情況下,這已經足夠了。(發佈/訂閱) 但是我們有一種情況,客戶端需要發送參數並從服務器獲取響應。 我知道直接的方法是用Http(例如Servlets)。 但是我們能否使用MQTT來實現這一點,因爲這意味着用戶的帶寬消耗會更低?
我們計劃使用MQTT將消息從我們的服務器傳遞到Android設備 ,我們決定使用開源服務器mosquitto。可以使用MQTT來實現請求/響應行爲
在大多數情況下,這已經足夠了。(發佈/訂閱) 但是我們有一種情況,客戶端需要發送參數並從服務器獲取響應。 我知道直接的方法是用Http(例如Servlets)。 但是我們能否使用MQTT來實現這一點,因爲這意味着用戶的帶寬消耗會更低?
是的,它只是需要仔細設計你的話題結構。作爲一個非常簡單的例子,你可以發佈到control/<client id>/request
和訂閱control/<client id>/response
我建議你看看如何RabbitMQ handles RPC。儘管AMQP與MQTT不同,但仍有相當多的高層次結轉。
歸結爲你需要的能力,使用消息頭創建短暫的「回覆」隊列與相關ID。或者,因爲@ralight說每個客戶都有兩個隊列。每個客戶端打開兩個隊列的問題當然是有序的,因此您必須在內部使用關聯ID和緩衝區以及路由(或者如果您的應用程序是同步的,則直到找到關聯ID爲止)。
但假設我有10000個客戶端都向服務器請求,如果我使用Http servlet實現這個例子,我不會擔心任何事情。但組件(在服務器端)是否可以處理同時發出的所有請求?換句話說,客戶端可以訂閱的主題最大數量是多少,因爲對於每個客戶端連接,我們必須添加新的訂閱? – 2013-04-10 10:57:14
是的,這當然是一個問題。像「我的測試涉及100K客戶訂閱100K主題」(來自https://lists.launchpad.net/mosquitto-users/msg00110.html)的引用應該有希望讓你知道什麼是可能的! – ralight 2013-04-10 12:26:39
http://www.bitreactive.com/mqtt-request-response/具有這種確切的方法,其全部關於主題結構 – Clocker 2016-04-07 15:37:45