2016-12-23 4 views
1

Когда pubnub подключен, пользователи внутри моего приложения получают сообщения без проблем. Однако предположим, что они обновляют страницу или переходят на другую страницу в приложении. В течение 2 -> 5 секунд простоя перед тем, как пользователь сможет снова подключиться к pubnub. В течение этого времени некоторые сообщения pubnub могут быть пропущены.Как использовать pubnub timetoken для обработки обновлений страницы

К счастью, pubnub subscribe API позволяет указать timetoken, чтобы указать на прошедшее время (например, 10 секунд назад).

pubnub.subscribe({ 
    channels: ['my_channel'], 
    timetoken: '13534398158620385' 
}); 

Описание:

Указывает timetoken, с которой начинается возвращение любых доступных кэшированных сообщений.

Вопрос: Что самый безопасный способ определить это timetoken таким образом, что несколько сообщений пропущено?

+0

2 - 5 секунд для загрузки страницы? Я бы подумал о оптимизации загрузки страниц. У нас не было никого, кто подал бы билет поддержки с этой проблемой. Но ваш ответ ниже твердый. Хорошая работа. –

+0

@CraigConover Я хотел оставить вопрос довольно простым, так что это всего лишь пример. Примечание. Загрузка здесь относится к загрузке веб-страницы, в отличие от того, сколько времени требуется для загрузки pubnub. –

+0

Правильно, это было мое понимание. Просто интересно, что такое контент, который длится так долго. Возможно, вы впервые попали в PubNub перед загрузкой содержимого? –

ответ

2

Для начала прослушайте beforeunload события на окне. Они будут запущены до того, как страница будет удалена. Внутри этого создать печенье, чтобы сохранить текущий timetoken:

window.addEventListener('beforeunload',() => { 
    const now = new Date().getTime(); 
    // pubnub timetokens are 17 digits long 
    const timetoken = `${now}0000`; 

    createCookie(PUBNUB_TIMETOKEN_COOKIE, timetoken, EXPIRATION); 
}); 

Примечание: PUBNUB_TIMETOKEN_COOKIE и EXPIRATION константы вашего выбора. Я установил, что мой файл cookie истекает через 10 секунд, чтобы предотвратить столкновения. Также вам необходимо определить функцию createCookie, аналогичную this one.

Далее, при подписке на pubnub на странице загрузки, используйте этот куки, если он существует:

pubnub.subscribe({ 
    channels: ['my_channel'], 
    timetoken: getCookie(PUBNUB_TIMETOKEN_COOKIE) 
}); 

Таким образом, если пользователь обновляет или переходит на другую страницу, пропущенные сообщения должны быть пойманы.

Смежные вопросы