您好,我正在开发像 tophatter.com 这样的拍卖应用程序。我想实现一个具有后台进程的应用程序。我希望这个过程永远运行直到我停止它
http://eoction.com这就是我们当前的网站。我们网站上的问题当我们刷新页面时拍卖也重新启动。我们需要像 tophatter.com 这样的连续流程,如果您刷新页面,它将加载更新的拍卖流程。
我发现了一项名为 pubnub 的出色服务。我在想我们需要一个后台进程吗?这将处理 pubnub block 上的拍卖,然后当我们访问该站点时,我们只需要查询其更新的过程?
pubnub 是否支持这样的东西?
最佳答案
PubNub 网页最佳实践
当用户刷新您的网络应用程序页面或导航到另一个页面时,无论您使用何种技术,作为网络应用程序开发人员都需要考虑一些事项。当 PubNub 集成到您的网页中时,我将在较高层次上说明您需要做的事情。
恢复参数
无论是用户中断了您与 PubNub 的连接还是网络故障,您都希望 PubNub 重新连接并尽可能从中断处继续。 PubNub JavaScript SDK有一个名为 restore 的初始化参数,当设置为 true 时,将重新连接到 PubNub 并在连接断开并重新建立后获取丢失的消息。
var pubnub = new PubNub({
subscribeKey: "mySubscribeKey",
publishKey: "myPublishKey",
ssl: true,
uuid: getUUID();
restore: true
});
重用UUID
为每个最终用户重复使用相同的 UUID 很重要,因为这将允许 PubNub 在出现状态时唯一地识别该用户,这样它就不会产生新的 join
同一最终用户的事件。 PubNub JavaScript SDK actually generates a UUID and stores it in localStrorage and reuses it by default但很可能您有自己的 UUID,您希望将其用于每个最终用户。
收到最后一条消息的时间 token
如果网络中断时间很短(例如页面刷新或页面导航),则在 restore:true
时会检索丢失的消息在 init
中实现如上所述。但是当用户离线超过 5 分钟时,您可能希望在一个或多个 channel 上检索错过的消息。执行此操作的最佳方法是每次通过 subscribe
接收到消息时,通过将其存储在 localStorage 中来跟踪最后收到的消息的timetoken打回来。当用户重新上线并且距离他们上次上线已经超过 5 分钟时,call history
using this last received message timetoken on each channel您需要从中获取错过的消息。
订阅 channel
最后,您需要根据连接中断前的状态,确保用户订阅了他们期望订阅的 channel 。如果是页面刷新,您可能只想将它们重新订阅到相同的 channel 列表。为此,您只需要再次在 localStorage 中保留他们当前订阅的 channel 列表。如果用户导航到新页面并导致整个页面重新加载(现代网络应用程序不应该要求这样做,但是......)那么您可能想要取消订阅某些 channel 并订阅新 channel ,这仅取决于该页面导航对您的应用程序意味着什么。现代网络应用程序框架不需要为页面导航重新加载整个页面,因为网络应用程序比旧的网络应用程序更像桌面应用程序。同样,如果用户离线了很长一段时间(超过 5 分钟),那么让他们订阅他们之前订阅的相同 channel 可能没有意义。真的取决于您的用例。
顺便说一下,Tophatter 使用 PubNub ;) 但以上所有内容都是通用的最佳实践指南和建议,并没有特别引用任何一个应用程序。
EDIT: To address you question specifically, as pointed out in comments below...
您不能在 PubNub BLOCKS 中实现长时间运行的进程(目前不能,无论如何),因此您需要一个服务器进程。当用户刷新页面时,您只需要访问您的服务器以获取当前状态。如果使用 PubNub 实时更新此进度条,您只需订阅发送该进度条状态的 channel 并更新您的客户端。使用我上面提供的相同最佳实践仍然是必要的。
关于javascript - Pubnub:拍卖应用程序开发的后台流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43846374/