当连接pubnub时,我的应用程序内的用户收到消息没问题。但是,假设他们刷新页面或转到应用程序中的其他页面。有一个2 - >用户可以再次连接到pubnub之前的5秒停机时间。在此期间,可能会遗漏一些pubnub消息。
值得庆幸的是,pubnub subscribe API允许您指定timetoken
指向过去时间(例如10秒前)。
pubnub.subscribe({
channels: ['my_channel'],
timetoken: '13534398158620385'
});
说明
指定从中开始返回任何可用缓存消息的timetoken。
问题:
指定此timetoken
的最安全的方法是什么,以至于错过了很少的消息?
答案 0 :(得分:2)
首先,在窗口上监听beforeunload
个事件。这些将在页面移开之前触发。在其中创建一个cookie来保存当前的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秒后过期以防止冲突。此外,您还需要定义类似于this one的createCookie
函数。
接下来,在页面加载时订阅pubnub时,如果存在,请使用此cookie:
pubnub.subscribe({
channels: ['my_channel'],
timetoken: getCookie(PUBNUB_TIMETOKEN_COOKIE)
});
这样,如果用户刷新或导航到另一个页面,则应捕获错过的消息。