2017-07-21 125 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

相关问题