2017-07-21 79 views
0

構建即時聊天應用程序(本地IOS和網絡)。探索是否使用XMPP或MQTT作爲應用程序協議。貌似我不能讓用戶在XMPP上編輯舊信息。消息是否可以在MQTT上編輯?我可以在mqtt服務器上編輯郵件嗎?

示例:我想實現「編輯消息」類似於Slack優惠,但點擊「(已編輯)」後,用戶可以看到不同版本的消息及其時間戳(例如您找到的評論的編輯歷史記錄在Facebook中),啓用對話的「審計跟蹤」。後續工作:看起來這隻能通過「黑客」來實現,最好是在XMPP或MQTT或其他協議/ websockets/JSON等上完成黑客攻擊嗎?

+0

通過在經紀人上編輯消息,你的意思是什麼? – hardillb

+0

請提供[最小,完整和可驗證](https://stackoverflow.com/help/mcve)示例。這將使我們能夠幫助你解決你的問題。 – gorkem

回答

0

一旦MQTT消息發佈到發佈客戶端已超過該消息沒有更多的控制在所有的經紀人。

大多數經紀人不會允許你編輯短信或者作爲他們只是轉發消息即刻訂閱相關話題的所有客戶端和排隊的消息與永久訂閱任何脫機客戶端。

唯一的例外情況可能是mosca broker在消息到達代理時有回叫,但這不會允許用戶編輯消息,只有系統可能在它是轉發給訂閱的客戶端。

+0

謝謝@hardillb。所以,根據你的經驗,你會建議探索什麼來實現「編輯」(像Slack提供的)? – Pat

+0

你不會以任何方式實現它。消息應包含元數據以涵蓋這類事情。 – hardillb

0

Hardlib的建議是正確的,編輯的消息以這種方式並不被大多數MQTT實現的支持,並實現它會打破出版商和客戶之間的鬆耦合是美德MQTT的。換句話說,這應該在更高層次上或通過其他手段來實施。

這就是說,如果我理解編輯的意思改一下經紀人轉發給客戶端最初發布期間不在線,你可以與保留的消息實現這個能力。試想一下:

  1. 客戶端A訂閱主題clientb /#和客戶端B訂閱主題客戶端A /#。

  2. 客戶端A將消息發佈到客戶端A /(唯一的消息ID),而客戶端B沒有被主動連接。經紀人保留該消息。

  3. 客戶端A決定編輯消息(通過您設計的某個界面),他們將修改後的消息發佈到客戶端/(唯一消息ID),以替換消息,並從訂閱者的角度編輯該消息。

  4. 客戶端B收到修改後的消息,當他們來到在線(只要沒有持續性會話或類似的東西)沒有變化的知識。

從這個例子中,你也許能告訴爲什麼這是一個糟糕的主意,因爲該服務器將在一個不同的主題留住每一個消息,可能會需要定期修剪......不提它將使一個爛攤子出來的時間戳,並需要各種其他的解決方法。但是,如果您有某種原因需要通過這種方式來實現,那麼您可以共同使用某些可用的東西。

+0

謝謝@blp。欣賞這個例子。爲了清晰起見,我編輯了這個問題,其目的確實是保留「編輯歷史」及其時間戳,以實現對話的「審計跟蹤」。 鑑於這是通過解決方法來實現的,你會說我們最好放棄MQTT或XMPP嗎? – Pat

+0

或其他一些協議/ websockets/JSON等? – Pat

+0

我認爲問題在於您可以通過所有這些方式來實現所有這些事情,它並不真正依賴協議來提供您可能要運行後端數據庫的那種審計線索。所以你的大環境對你的協議選擇比編輯關注更重要。因此,例如,如果存在能源限制或網絡可靠性問題,我會使用HTTP上的MQTT。 – blp

相關問題