【问题标题】:Pubnub channel group historyPubnub 频道组历史记录
【发布时间】:2015-09-21 10:07:59
【问题描述】:

我已经完成了 pubnub 频道组设计模式,http://scalabl3.github.io/pubnub-design-patterns/2015/08/11/Advanced-Channel-Groups-Friend-Lists-Status-Feed-And-Presence.html

但仍然对实施群聊有一些疑问

假设我有 GP1、GP2 组

GP1--A,B,C(成员) GP2--A、D、E(成员)

  • 这里我需要订阅 2 个组吗,如果 2 个我需要在两个组中添加 A 吗?或 1 组通过过滤 ABCDE
  • 如何通过一次 api 调用获取所有组历史记录(假设 GP1 有超过 100 个朋友)

谢谢

【问题讨论】:

    标签: java android pubnub


    【解决方案1】:

    我写的你所指的帖子主要是关于创建浅层朋友图和状态提要的模式,但你可以很容易地将其调整为聊天。

    对于聊天,您可以在这里学习模式:http://scalabl3.github.io/pubnub-design-patterns/2015/03/05/Inbound-Channel-Pattern.html

    如果群聊有小群,Inbound 模式效果很好,我会说群聊中少于 5-7 人。它确实适用于较大的团体,例如。 50 人,因为您要针对您发送的每条聊天消息发布到每个用户的入站频道。对于较大的群组,群聊本身应该有自己的频道。你是对的,如果你参与了大量的大型群聊,你将不得不检索每个群聊的历史记录,每个群聊都是一个 API 调用。如果聊天更多的是 1-1 或小组,那么 Inbound 模式可以更轻松地获取历史记录。

    合并这两种模式意味着您将使用 cg-user-[uid]-status-feed(也可能想称它为不同的名称,命名约定当然可以是您自己的,也许 cg-user-[uid] -chats),但放入入站频道+任何更大的群聊频道。

    历史记录仍以每个频道为基础,因此您将获得针对任何 1-1 或小型群聊的 Inbound 的历史记录,然后获取用于较大群聊的任何频道的历史记录。

    更具体地说是您的问题:

    GP1 和 GP2 都是小组,因此通过入站通道向每个用户发送任何聊天消息更简单,在每个单独的组中,在 JSON 有效负载中,您还将包含如下元数据:

    Message to GP1 from User A
    { 
       group_chat: "GP1",
       from: "A",
       to: "A,B,C",
       timestamp: 1443112089,
       message: "hey guys, good morning"
    }
    
    Message to GP2 from User E
    { 
       group_chat: "GP2",
       from: "E",
       to: "A,D,E",
       timestamp: 1443112192,
       message: "I'm going afk for a bit, time for the gym"
    }
    

    此消息将发布 3 次,针对用户 [GP1: A,B,C, GP2: A,D,E] 的每个入站通道发布。通过该元数据,您可以获得所需的信息,以便在您的 UI 中确保将收到的消息放入正确的 UI 容器中,即 GP1 和 GP2 的群聊。

    如果您还有其他问题,请告诉我...

    【讨论】:

      【解决方案2】:

      PubNub 频道组设计模式和用例

      我认为您可能误解了您提供的链接中设计模式的意图。因此,与其尝试解决特定的设计模式,我将解释如何在非常高的级别上使用PubNub Channel Groups 实现群聊,也许该链接上的详细设计模式可能会变得更加明显。

      每个最终用户都有自己的频道组:

      • cg_user123
      • cg_user456
      • 等等

      最终用户的频道组将包含他们当前参与(或至少被动收听)的每个聊天室频道。所以cg_user123 可能有频道sports_talkmoney_talk 和pubnub_is_awesome_talk。 cg_user456 可能有 money_talkyour_momma_jokes。因此,每个用户的频道组都可以维护该最终用户独有的不同频道列表。

      您还可以考虑 Facebook 或 Twitter 设计模式(朋友和追随者)。每个最终用户都将拥有一个独特的频道组,其中包含他们所有朋友或他们关注的人的所有频道。当其中一个朋友在他们的私人频道上发布消息时(不要与他们的私人频道组混淆),那么该发布者的所有朋友都会收到该消息,因为该频道在他们每个朋友的唯一频道组中。如果我想取消好友或取消关注某人,我只需从我的频道组中删除该私人频道即可。

      您还可以将频道组视为感兴趣的主题或主题(频道)。也许您决定您的应用程序允许您的最终用户订阅体育、金融、技术和政治等主题。您可以为每个频道组创建一个频道组,并添加与这些频道组主题/主题相关的频道。因此technology 频道组将包含pubnub_is_awesomeruby_fanboyslong_live_cobol 频道(以及更多),而其他频道组将包含适合这些主题的频道。然后,您的最终用户将选择接收来自这些高级主题的消息,并且您的应用程序将根据他们的主题兴趣将他们订阅到适当的频道组。并且您的服务器端代码可以在创建新通道时动态地向这些通道添加新通道,并删除不再使用的通道,并且您的客户端代码不需要做任何额外的工作。

      我知道这可能不会直接回答您的问题,但我相信它可以更好地了解频道组的一些流行用例。

      【讨论】:

      • 我会让该设计模式的作者审查您的原始问题并直接解决与他的设计模式相关的问题。
      • 关于令人困惑的“频道组”关键字的精彩说明。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多