我可以在mqtt服务器上编辑消息吗?

时间:2017-07-21 15:56:22

标签: xmpp chat protocols mqtt messaging

构建即时聊天应用(本机IOS和网络)。探索是否将XMPP或MQTT用作应用程序协议。看起来我不能让用户在XMPP上编辑旧消息。可以在MQTT上编辑消息吗?

示例:我想像Slack提供的那样实现“编辑消息”,但是在单击“(已编辑)”以允许用户查看消息的不同版本及其时间戳(例如您在其中找到的评论的编辑历史记录) Facebook),实现对话的“审计跟踪”。

跟进:看起来这只能通过“hack”来实现,在XMPP或MQTT或其他协议/ websockets / JSON等上完成黑客攻击会更好吗?

2 个答案:

答案 0 :(得分:0)

将MQTT消息发布到代理后,发布客户端根本无法控制该消息。

大多数代理都不允许您编辑消息,因为他们只会立即将消息转发给订阅相关主题的所有客户端,并为具有持久订阅的任何脱机客户端排队消息。

唯一的例外可能是当消息到达代理时回调的mosca代理,但这不允许用户编辑消息,只有系统可能在转发之前的瞬间更新有效负载订阅的客户。

答案 1 :(得分:0)

Hardlib的建议是正确的,大多数MQTT实现都不支持以这种方式编辑消息,并且实现它会破坏发布者和订阅者之间的松散耦合,这是MQTT的优点。换句话说,这应该在更高层次或通过其他方式实施。

也就是说,如果我理解编辑意味着能够在初始发布期间更改代理转发给不在线的客户端的能力,则可以使用保留的消息实现此功能。考虑一下:

  1. 客户A订阅了主题clientb /#,客户B订阅了主题clienta /#。

  2. 客户端A在客户端B未主动连接时向客户端/(唯一消息ID)发布消息。经纪人保留信息。

  3. 客户端A决定编辑消息,以便(通过您设计的某个界面)将修改后的消息发布到clienta /(唯一消息ID),替换消息,并从订阅者的角度编辑其中的内容。

  4. 客户B在上线时收到修改后的消息,并且(只要没有持久会话或类似内容)不知道更改。

  5. 从这个例子中你可以说出为什么这是一个坏主意,因为服务器将保留不同主题中的每一条消息,并且可能需要定期修剪...不要说它会使时间戳和需要弄得一团糟各种各样的其他工作。但是,如果有某种原因你必须以这种方式实现它,你可以破解可以一起使用的东西。

相关问题