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

Xmpp 我可以在mqtt服务器上编辑消息吗?,xmpp,chat,protocols,mqtt,messaging,Xmpp,Chat,Protocols,Mqtt,Messaging,构建即时聊天应用程序(本机IOS和web)。探索是否将XMPP或MQTT用作应用程序协议。似乎我不能让用户在XMPP上编辑旧消息。可以在MQTT上编辑消息吗 示例:我想实现“编辑消息”功能,就像Slack优惠一样,但单击“编辑”后,允许用户查看消息的不同版本及其时间戳(如在Facebook中找到的评论的编辑历史记录),从而启用对话的“审计跟踪” 后续:由于这似乎只能通过“黑客”来实现,所以在XMPP或MQTT或其他协议/websockets/JSON等上进行黑客攻击是否更好?一旦MQTT消息发布

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

示例:我想实现“编辑消息”功能,就像Slack优惠一样,但单击“编辑”后,允许用户查看消息的不同版本及其时间戳(如在Facebook中找到的评论的编辑历史记录),从而启用对话的“审计跟踪”


后续:由于这似乎只能通过“黑客”来实现,所以在XMPP或MQTT或其他协议/websockets/JSON等上进行黑客攻击是否更好?

一旦MQTT消息发布到代理,发布客户端就根本无法控制该消息

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


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

Hardlib的建议是正确的,大多数MQTT实现不支持以这种方式编辑消息,实现它将打破发布服务器和订阅服务器之间的松散耦合,这是MQTT的优点。换言之,这应该在更高的层次上或通过其他手段加以实施

也就是说,如果我理解编辑意味着能够更改代理在初始发布期间转发给不在线的客户端的内容,那么您可以通过保留消息来实现这一点。考虑这一点:

  • 客户端A订阅了topic clientb/#,客户端B订阅了topic clienta/#

  • 客户端A在客户端B未处于活动连接状态时向客户端A/(唯一消息id)发布消息。代理保留消息

  • 客户端A决定编辑消息,以便(通过您设计的某些界面)将修改后的消息发布到clienta/(唯一消息id),该消息将替换消息,并从订阅者的角度编辑消息

  • 客户端B在联机时收到修改后的消息,并且(只要没有持续会话或类似的内容)不知道更改


  • 从这个示例中,您可能会知道为什么这是一个坏主意,因为服务器会将每个消息保留在不同的主题中,并且可能需要定期修剪。。。更不用说它会把时间戳弄得一团糟,并且需要各种其他的解决方法。然而,如果有某种原因,您必须以这种方式实现它,那么您可以一起破解一些可用的东西

    您在代理上编辑消息的确切含义是什么?请提供示例。这将允许我们帮助您回答您的问题。谢谢@hardillb。那么,根据您的经验,您建议探索如何实现“编辑”(如Slack offers)?您不会以这种方式实现它。邮件应该包含元数据来涵盖这类内容。谢谢@blp。欣赏这个例子。为了清晰起见,我刚刚编辑了这个问题,其目的确实是保留“编辑历史记录”及其时间戳,以便对对话进行“审计跟踪”。考虑到这是通过一种变通方法来实现的,您认为我们最好尝试一下MQTT或XMPP?或者其他一些协议/websockets/JSON等等?我认为问题是您可以通过所有这些方法来实现所有这些目标,它并不是真的依赖于协议,因为要提供这种审计跟踪,您可能要运行后端数据库。。。因此,与编辑问题相比,您的大环境对协议选择的影响更大。因此,例如,如果存在能量限制或网络可靠性问题,我将使用MQTT over HTTP。这也可能有帮助: