如何使用pubnub timetoken处理页面刷新
How to use pubnub timetoken to handle page refreshes
连接 pubnub 后,我的应用程序内的用户可以毫无问题地接收消息。但是,假设他们刷新页面或转到应用程序中的另一个页面。在用户可以再次连接到 pubnub 之前,有 2 -> 5 秒的停机时间。在此期间,可能会错过一些 pubnub 消息。
幸运的是,pubnub subscribe API 允许您指定 timetoken
以指向过去的时间(例如 10 秒前)。
pubnub.subscribe({
channels: ['my_channel'],
timetoken: '13534398158620385'
});
描述:
指定开始返回任何可用缓存消息的时间标记。
问题:
指定此 timetoken
的最安全方法是什么,这样就不会遗漏几条消息?
首先,监听 window 上的 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)
});
这样,如果用户刷新或导航到另一个页面,应该会捕获错过的消息。
连接 pubnub 后,我的应用程序内的用户可以毫无问题地接收消息。但是,假设他们刷新页面或转到应用程序中的另一个页面。在用户可以再次连接到 pubnub 之前,有 2 -> 5 秒的停机时间。在此期间,可能会错过一些 pubnub 消息。
幸运的是,pubnub subscribe API 允许您指定 timetoken
以指向过去的时间(例如 10 秒前)。
pubnub.subscribe({
channels: ['my_channel'],
timetoken: '13534398158620385'
});
描述:
指定开始返回任何可用缓存消息的时间标记。
问题:
指定此 timetoken
的最安全方法是什么,这样就不会遗漏几条消息?
首先,监听 window 上的 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)
});
这样,如果用户刷新或导航到另一个页面,应该会捕获错过的消息。