Каков наилучший способ перезапустить сеанс cometd после того, как старый истек? В частности, при использовании библиотеки Javascript CometD и API потоковой передачи Salesforce.Salesforce Streaming API: переключение на Cometd после окончания сессии
В настоящее время я пытаюсь написать серию веб-страниц, которые используют API потоковой передачи Salesforce, который работает с использованием Cometd, для автоматического обновления данных на странице. Это работает нормально, но теперь я пытаюсь решить, что делать после окончания сессии.
В настоящее время я тестирую очень небольшой промежуток времени, в частности 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.init $ .cometd.handshake, но это, похоже, не работало, если мои подписки не получили вызов до того, как код выше был вызван в 2-й раз. Я также попытался вызвать $ .cometd.disconnect, но это, казалось, блокировало любые вызовы от доступа к моим подпискам после того, как я вызываю эту функцию, даже если я запускаю ее синхронно.
Я делаю это правильно, а 20-секундный интервал - это беспорядок или есть лучший способ сделать это?
с использованием раствора подробно в принятом ответе, ваши clearListeners() больше надо? –