如何使用pubnub timetoken来处理页面刷新

时间:2016-12-23 12:14:33

标签: javascript pubnub

当连接pubnub时,我的应用程序内的用户收到消息没问题。但是,假设他们刷新页面或转到应用程序中的其他页面。有一个2 - >用户可以再次连接到pubnub之前的5秒停机时间。在此期间,可能会遗漏一些pubnub消息。

值得庆幸的是,pubnub subscribe API允许您指定timetoken指向过去时间(例如10秒前)。

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

说明

指定从中开始返回任何可用缓存消息的timetoken。

问题: 指定此timetoken的最安全的方法是什么,以至于错过了很少的消息?

1 个答案:

答案 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_COOKIEEXPIRATION是您选择的常量。我设置我的cookie在10秒后过期以防止冲突。此外,您还需要定义类似于this onecreateCookie函数。

接下来,在页面加载时订阅pubnub时,如果存在,请使用此cookie:

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

这样,如果用户刷新或导航到另一个页面,则应捕获错过的消息。