【问题标题】:Do I have to keep subscribing to get messages in PubNub?我是否必须继续订阅才能在 PubNub 中接收消息?
【发布时间】:2018-03-16 09:07:29
【问题描述】:

我是 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;
    }
  }
}

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

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

【问题讨论】:

    标签: pubnub


    【解决方案1】:

    PubNub C SDK 订阅

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

    此处有代码 sn-p,但更多信息请参见上述 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-09
      相关资源
      最近更新 更多