gpt4 book ai didi

javascript - Salesforce 流式 API : Recconnect to Cometd after session expires

转载 作者:行者123 更新时间:2023-11-29 14:55:43 24 4
gpt4 key购买 nike

在旧 session 过期后重新启动 cometd session 的最佳方法是什么?特别是在使用 CometD Javascript 库和 Salesforce Streaming API 时。

目前我正在尝试编写一系列使用 Salesforce Streaming API 的网页,该 API 使用 Cometd 运行,以自动更新页面上的数据。这工作正常,但我现在正在尝试处理 session 到期后的操作。

目前我正在非常短的时间范围内进行测试,特别是 20 秒。我两次调用下面的代码。首先是在页面加载时,然后在 20 秒后再次加载。

$.cometd.clearListeners();
$.cometd.init({
url:window.location.protocol+'//'+window.location.hostname+'/cometd/28.0/',
requestHeaders: { Authorization: 'OAuth {!$Api.Session_ID}'}
});
[Initialize Subscriptions]

这工作正常,但并非没有我想避免的一些问题。

看起来如果我在上面的代码第二次运行之前通过我的订阅收到一个调用,我的订阅处理程序会在它捕获的下一个调用时触发两次。我已经尝试用 $.cometd.handshake 替换 $.cometd.init,但这似乎从来没有奏效,除非我的订阅在上面的代码被第二次调用之前收到了一个电话。我还尝试调用 $.cometd.disconnect,但这似乎会阻止任何调用在我调用该函数后到达我的订阅,即使我同步运行它也是如此。

我做得对吗?20 秒的间隔把事情搞砸了,还是有更好的方法来做到这一点?

最佳答案

我正在 CometD 中回答观点。

在旧 session 过期后重新启动 CometD session 的最佳方法是什么都不做。

CometD 具有自动重新连接功能,因此如果网络连接断开且 session 过期,CometD 将自动重试,直到成功再次连接到服务器,尝试之间有退避间隔。

为了保证你的订阅在重新握手时恢复,你只需要按照the guidelines ,特别是从 /meta/handshake 成功的监听器执行您的订阅。

如果你想在断开连接的情况下测试你的 JavaScript 代码行为,你只需要创建断开连接,而不是调用 cometd.init() 两次。您可以杀死服务器、拔掉网线、取消部署 webapp 等。

如果你明确断开客户端,那么你必须手动重新握手:

cometd.init(...);
...

// Disconnect
cometd.disconnect();
// Wait a while, then re-handshake
cometd.handshake();

请注意,您必须“稍等片刻”,因为cometd.disconnect() 是异步的。或者,您可以:

cometd.init(...);
...

// Disconnect and re-handshake when fully disconnected
cometd.addListener('/meta/disconnect', function(message)
{
cometd.handshake();
});
cometd.disconnect();

// Another solution, using setTimeout()
cometd.disconnect();
window.setTimeout(function()
{
cometd.handshake();
}, 5000);

关于javascript - Salesforce 流式 API : Recconnect to Cometd after session expires,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18278194/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com