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

Javascript 如何使用pubnub timetoken处理页面刷新,javascript,pubnub,Javascript,Pubnub,当连接pubnub时,我的应用程序中的用户接收消息没有问题。但是,假设他们刷新页面或转到应用程序中的其他页面。在用户再次连接到pubnub之前,有2->5秒的停机时间。在此期间,可能会错过一些pubnub消息 谢天谢地,允许您指定一个timetoken来指向过去的时间(例如10秒前) 说明: 指定开始返回任何可用缓存消息的timetoken 问题: 指定此timetoken以减少消息丢失的最安全方法是什么。这些将在页面移出之前触发。在此内部创建一个cookie以保存当前的timetoken: w

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

谢天谢地,允许您指定一个
timetoken
来指向过去的时间(例如10秒前)

说明:

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

问题:
指定此
timetoken
以减少消息丢失的最安全方法是什么。这些将在页面移出之前触发。在此内部创建一个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);
});
注意:
publinub\u TIMETOKEN\u COOKIE
EXPIRATION
是您选择的常量。我将cookie设置为10秒后过期,以防止冲突。您还需要定义一个类似于的
createCookie
函数

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

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

这样,如果用户刷新或导航到另一个页面,就会捕获丢失的消息

页面加载2-5秒?我会考虑优化你的页面负载。我们还没有让任何人提交此问题的支持票证。但你下面的答案是可靠的。干得好。@CraigConover我想让这个问题非常基本,所以这只是一个例子。注意,这里的加载指的是网页加载,而不是pubnub加载所需的时间。对,这是我的理解。只是想知道什么内容需要这么长时间。也许你可以在加载内容之前先点击PubNub?可能吧。不管怎样,都会有一段时间的停机时间。没错,只是说很多使用PubNub的web应用程序都不需要实现任何特殊功能。
pubnub.subscribe({
  channels: ['my_channel'],
  timetoken: getCookie(PUBNUB_TIMETOKEN_COOKIE)
});