【问题标题】:Threaded messaging on pubnubpubnub 上的线程消息传递
【发布时间】:2021-07-08 03:20:51
【问题描述】:

我们希望在 Pubnub 上的聊天频道中为消息创建线程。例如,某人可以通过“创建线程”并开始聊天来响应频道中的特定消息。是否有规定的方法来模拟这种行为?如果是这样,您能否参考文档?

这是你在slack中看到的行为,供参考。

【问题讨论】:

    标签: pubnub


    【解决方案1】:

    没有针对线程消息传递的现成解决方案。但是,可以通过使用元数据标记它们(使用 PN 对象和/或 MessageActions),然后在您端进行一些编码来维护和处理它们的关系,从而在消息之间建立层次关系。

    您可以使用线程第一条消息的时间标记作为键,根据它对消息进行分组,并使用消息自己的时间标记为 UI 生成顺序。

    https://www.pubnub.com/docs/sdks/javascript/api-reference/publish-and-subscribe#methods

    这是执行此操作的高级设计:

    • 一条消息发布到名为chat_11223344 的频道(频道名称使用chat_ 作为所有聊天频道的前缀和生成的ID - 在此处保持简短,但您可以为此使用uuid 生成器)。该发布返回一个发布时间令牌,类似于:16183330926487763
    • 使用PN Objects,可以设置频道的显示名称和说明。
    • 在您的聊天 UI 中,您允许某人在该消息上创建一个线程。消息被发布到名为 chat_11223344.16183330926487763 的通道,使用顶级消息的发布时间令牌作为“子通道”名称。
    • 为了方便您识别线程化的顶级消息,您可以在发布第一个“线程化”消息时向该消息添加MessageAction。您可能还想添加自定义频道元数据(同样是 PN 对象)以添加 "isThreaded":true 键/值。

    【讨论】:

      【解决方案2】:

      因此,使用 PubNub,您可以将元数据附加到消息本身,或者 PubNub 有一个称为元 (https://www.pubnub.com/docs/sdks/javascript/api-reference/publish-and-subscribe#methods) 的部分。

      一个示例有效载荷可能是:

      {
        "type":"message",
        "payload":"What do people want for lunch? Pizza?",
        "sender":"me",
        "sent":1618336638,
        "messageActive":true,
        "channel":"main",
        "messageID":"main.abc123"
      }
      

      其中abc123 是引用该消息的uuid。 当有人想线程化消息时,您可以将 "threaded":true 变量附加到对象。

          {
            ...
            "messageID":"main.abc123",
            "threaded":true,
            ...
          }
      

      现在您的 UI 知道有一个分支线程,使用 main.abc123.thread 作为该特定线程的通道 ID。 然后您的应用订阅新频道main.abc123.thread,您可以使用fetchMessages(); 获取历史消息以及新的实时消息。

      【讨论】:

        猜你喜欢
        • 2012-08-02
        • 1970-01-01
        • 2021-03-27
        • 1970-01-01
        • 2012-01-07
        • 2015-08-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        相关资源
        最近更新 更多