我是否必须继续订阅在PubNub中获取消息?

时间:2017-12-03 04:21:37

标签: pubnub

我是PubNub API的新手,根据PubNub C ++ SDK中的示例,我必须将订阅放在循环中以持续获取消息。

// Sync
void subscribe(pubnub::context &pn) {
  enum pubnub_res res;

  for (;;) {
    res = pn.subscribe("my_channel").await();

    if (PNR_OK == res) {
      std::vector<std::string> msg = pn.get_all();

      for (std::vector<std::string>::iterator it = msg.begin(); it != msg.end(); ++it) {
       std::cout << *it << std::endl;
      }
    } else {
      std::cout << "Request failed" << std::endl;
      break;
    }
  }
}

对我来说没什么意义。通常我们只需要订阅一次,然后我们可以继续收到消息?在我的用例中,我还确认我必须订阅我的频道,收到消息,然后再次订阅该频道以获取下一条消息。为了不断收到消息,我必须继续订阅。但那么在我的订阅之间到达的消息呢?他们会迷路吗?

我很困惑......非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

PubNub C SDK订阅

PubNub C/C++ SDK与其他SDK的不同之处仅在于这些语言的工作方式。您订阅,您立即获得成功,然后再次订阅。收到消息后,您再次订阅。如果在订阅超时结束时(大约5分钟)没有收到任何消息,则再次订阅。这就是所有其他SDK的工作方式,但他们会自动完成。

此处的代码段,但在上面的SDK文档链接中有更多内容。

pubnub_subscribe(ctx, "my_channel", NULL);
pbresult = pubnub_await(ctx);
if (PNR_OK == pbresult) {
    char const *message = pubnub_get(ctx);
    while (message != NULL) {
        message = pubnub_get(ctx);
    }
}