2017-06-26 21 views
0

我想在我的消息傳遞平臺中向用戶顯示已發送和已閱讀的回執。我使用Eclipse的Paho圖書館和Mosquitto作爲經紀人。由於Mosquitto不存儲信息,這是最好的方法/插件如何在MQTT經紀商Mosquitto中顯示已交付和已閱讀的收據?

  1. 顯示交付收據 - 如何使用QoS2確認收據做到這一點?
  2. 顯示讀回執 - 給我建議的方式來做到這一點
  3. 如何存儲郵件,以便用戶可以查看其聊天記錄?任何在mysql中的架構見解都會非常有幫助。

回答

2

快速解答您的疑問:

  1. 高QoS(1/2)沒有端到端的交付確認,這是券商和客戶端之間只確認。例如在QOS 2上發佈的發佈者僅在發佈者和經紀人之間進行確認,而不是在訂閱者之後(無論如何可以訂閱不同的QOS)。做到這一點的唯一方法是從接收端向發件人發送單獨的消息。對於任何特定的主題,也可能有多個用戶,所以你必須考慮這是如何工作的。

  2. 再次,要做到這一點的唯一方法是發送一個獨立的消息在讀

  3. 消息你將不得不自己實現。唯一可能的幫助就像內置的支持將消息存儲在某些代理商的數據庫中(這不是規範的一部分,因此完全支持實現) hivemq

+0

感謝您對每個零件的明確答案。還有一件事 - 我們可以改變蚊子的來源或添加插件來處理消息之前交付給用戶(如檢查俚語)?我知道這不會被推薦,因爲這會減慢經紀人,但我想除了在交付之前攔截和處理,沒有別的辦法。 –

+0

Mosquitto是開源軟件,你可以做任何你想做的事情。但是您可能會發現其他一些經紀人更適合這件事 – hardillb

+0

任何關於維護唯一消息ID(跨客戶和經紀人)的幫助,以便我們可以發佈帶有正確ID的讀取消息以在前端進行更改。 –

1

Hardlib的答案是100%的目標,但我會添加一些實現的想法。

我認爲MQTT的一個常見誤解是它實際上是一個M2M(機器對機器)協議,而不是用戶之間交換消息的系統。這並不是說你不能將它用於消息傳遞(Facebook做過),但它存在於MQTT之上的圖層中。換句話說,MQTT被設計用來在機器之間路由消息,而不用關心這些消息的內容。這意味着用戶級別的細節(交付確認等)不是其中的一部分,而是您在MQTT之上實施的一些東西。

因此,這裏有關於如何實現您提出的MQTT的頂部是什麼的一些想法:

考慮,你有兩個客戶端(X & Z)這兩個訪問同一代理的情況(Y) 。要客戶端X確認它已經收到來自客戶端Z的消息,只需讓客戶端X向客戶端Z訂閱的主題(可以說是確認/ z)發送消息。這在使用Python或任何你正在編寫你的應用程序時很簡單(例如,我使用該基本程序來測量我的代理的往返時間)。

但是,考慮到QoS可以保證代理已收到該消息(並且可以保留或以其他方式保留給其他客戶端),但我會質疑這是否真的有必要,除非客戶端Z確切知道客戶端X何時收到該消息至關重要。

根據您的需要,有多種提供主題歷史的方法。有關MySQL的詳細信息,請參閱答案herehere。但是,如果您只需要一個本地聊天記錄或幾個主題上的活動記錄,可以考慮將時間戳有效負載輸出到文本文件或JSON。除非你處理大量的消息或者需要編寫複雜的查詢,否則MySQL感覺過度殺傷了。