PubNub:如何获取最后 5 条消息

PubNub: how to get last 5 messages

我的 Pubnub 频道中有二十多条消息。然后我尝试使用

获取最后五条消息
let startTimeToken = dateToTimeToken(NSDate(timeIntervalSince1970: 0)) //unix time interval 0
let endTimeToken = dateToTimeToken(NSDate()) // now

self.pubnub?.historyForChannel(room, start: startTimeToken, end: endTimeToken,
        limit: 5, reverse: true, includeTimeToken: true, withCompletion: {
        (result, status) -> Void in
}

并发现,无论反向参数是真还是假,我总是收到前五条消息,而不是最后一条

获取最后五条消息的唯一方法是

self.pubnub?.historyForChannel(room, start: endTimeToken, end: nil,
        limit: 5, reverse: false, includeTimeToken: true, withCompletion: { 
        (result, status) -> Void in
}

但这到底是什么? 开始 = 结束,结束 = 零,反向 = 假 你收到最后 5 条消息?

首先我不明白这个逻辑。为什么第一个语句完全忽略反向参数?

PubNub 历史课 ;)

历史 API 一开始可能有点晦涩难懂,但是一旦您了解了它的工作原理,您就可以得到您需要的东西。也就是说,我们 (PubNub) 正在开发一个更强大、更易于使用、功能更丰富的历史记录 API.

您问题的答案

  1. 当您提供 startend 参数时,reverse 参数将被忽略,而是使用默认值,即 false,这意味着获取消息从最新的时间标记(end 参数)开始并及时向后移动,直到检索到 5 条消息(您的 count 参数值)。
  2. 如果你只想要最后5条消息(最新的5条消息),只需将startend设置为nil,将count设置为[=20] =] 和 reversefalse。如果您想要前 5 条消息(最早的 5 条消息),则将 reverse 设置为 true

PubNub 历史的一些基本规则

如果你能学会以下historyAPI的规则,你将成为这方面的专家。

  1. 每次 history 调用最多可返回 100 条消息。您可以使用 count 参数指定少于 100 条,但不能指定更多。如果您需要超过 100 条消息,您可以翻阅历史记录(此处不涉及)。
  2. 仅使用 start 参数总是 returns 消息 比提供的 timetoken 更旧。如果您设置 reverse = true,您将收到比提供的 timetoken 更新 的消息。并且 start 是独占的(带有 timetoken = start 的消息是 NOT 返回)。
  3. 仅使用 end 参数总是 returns 消息 比提供的时间标记更新。如果您设置 reverse = true,您将收到比提供的时间令牌 更早 的消息。并且 end 是包容性的(返回带有 timetoken = end 的消息)。
  4. 当您提供 startend 参数时,将忽略 reverse 参数并使用默认值 false。这是因为它总是只提供该时间标记范围内的结果。
  5. reverse 参数指示从时间轴的哪一端开始搜索:最旧的消息和向前(从左到右),reverse = true 或最新的消息和向后,reverse = false (默认值)。
  6. 如果您使用 reverse = false 调用 history 且没有其他参数(startendcount),您将得到 最多 100 条最新消息(如果该频道的历史消息少于 100 条,则为 < 100)。这是因为您正在从时间线的最新一端开始搜索历史。
  7. 如果您使用 reverse = true 调用 history 且没有其他参数(startendcount),您将得到 最多 100 条最旧的消息(如果该频道的历史消息少于 100 条,则小于 100 条)。这是因为您正在从时间轴最旧的一端开始搜索历史。

查看 Storage And Playback Getting Started Guide 了解更多关于 PubNub history API 工作原理的信息(带时间线图)。