salesforce - 如何在与 Salesforce Platform EventBus 对话的 Cometd 客户端中刷新令牌?
问题描述
我正在使用 cometd 来监听 Salesforce 中生成的平台事件。我的 cometd 客户端配置代码看起来像
this.client.configure({
url: `${this.org.instance_url}/cometd/46.0`,
requestHeaders: {
Authorization: `Bearer ${salesforceToken}`
},
appendMessageTypeToURL: false
});
其中salesforceToken
是使用刷新令牌获得的。这一切都可以正常工作一段时间,但如果在相当长的一段时间内没有事件(传闻在 6-24 小时之间的任何地方),那么我的客户似乎过期并且没有收到任何事件。如果我刷新令牌并重新启动我的侦听器,事情就会重新开始。
除了编写某种计时器以在不活动后每隔几个小时重新启动进程之外,有没有办法让侦听器保持活动状态?
解决方案
您不必再次刷新令牌
只要通道上没有活动,服务器就会在特定时间后关闭连接。
在那段时间,客户端收到403(未知客户端)状态码,客户端必须在 110 秒内再次握手。
默认情况下,CometD 会在没有任何用户交互的情况下尝试重新连接,如果客户端未在预期时间内重新连接,服务器将删除客户端的 CometD 会话。
一旦连接重新连接,ComedD 将删除所有频道订阅,我们必须再次订阅频道才能接收事件。
为此,我们必须使用meta/Handshake回调来重新订阅频道。
推荐阅读
- wordpress - 不和谐上 Wordpress 网站的链接描述
- webgl - 如何以及何时在顶点和片段着色器中选择 highp、lowp 和 mediump?
- python - Python子进程多个非阻塞通信
- r - 为什么在使用 predict() 时拟合结果如此不同?
- docker - nginx 容器似乎无法到达 OSC 响应者 *LetsEncrypt):如何调试?
- amazon-web-services - 无服务器:无法使用部署命令在 AWS 上加载 lambda 函数
- react-native - getDerivedStateFromProps 何时清除数据?
- reporting-services - SSRS 显示每组 X 行数
- linux - Shell scipt 将位字符串转换为文本值代码
- vue.js - v-show 在 IE 浏览器上无法正常工作