如何在与Salesforce Platform EventBus对话的Comet客户端中刷新令牌?

时间:2019-12-12 12:12:12

标签: salesforce cometd

我正在使用cometd来侦听Salesforce中生成的平台事件。我的Cometd客户端配置代码如下

this.client.configure({
      url: `${this.org.instance_url}/cometd/46.0`,
      requestHeaders: {
        Authorization: `Bearer ${salesforceToken}`
      },
      appendMessageTypeToURL: false
    });

其中salesforceToken是使用刷新令牌获得的。这一切在一段时间内都可以正常工作,但如果在相当长的一段时间内(没有事件,通常在6-24小时之间)没有任何事件,那么我的客户似乎 expire 并且没有收到任何事件。如果刷新令牌并重新启动侦听器,事情将再次开始工作。

除了编写某种计时器以在不活动后每隔几个小时重新启动该过程之外,是否可以使侦听器保持活动状态?

1 个答案:

答案 0 :(得分:0)

您不必再次刷新令牌

只要通道上没有任何活动,服务器就会在特定时间后关闭连接。

在那段时间内,客户端收到 403(未知客户端)状态码,并且客户端必须在110秒内再次握手。

默认情况下,CometD会尝试在没有任何用户交互的情况下重新连接,并且如果客户端在预期时间内没有重新连接,则服务器将删除客户端的CometD会话。

重新建立连接后,ComedD将删除所有频道订阅,我们必须再次订阅该频道才能接收事件。

为此,我们必须使用 meta / Handshake 回调来重新订阅该频道。