【问题标题】:Auction site Timed out event拍卖网站超时事件
【发布时间】:2015-10-06 01:17:28
【问题描述】:

我正在创建一个拍卖网站,其中拍卖具有特定的结束日期/时间。 我有一个 javascript 计时器向用户显示剩余时间,当它倒计时时它会触发并更新后端 mongodb 数据库以表示拍卖已完成并通知获胜用户并触发 CLOSE 函数。

对于当时未在浏览器中实际打开的拍卖,您如何建议这样做,这样 Timer 事件就不会创建此 CLOSE 事件。

【问题讨论】:

  • 计时器应该与用户的浏览器无关。它们都应该在服务器上完成。

标签: javascript jquery mongodb


【解决方案1】:

我根本不推荐这种方法。一旦我在一个网站上工作,我需要实施拍卖。该项目在 php 中,所以我编写了一个 php 脚本,它检查数据库中的所有拍卖行并查找那些 timeEnd >= current time 并将它们的状态设置为关闭(拍卖表有 int 列的状态)。

然后我将该 php 脚本设置为每小时运行一次 cron job。所以现在服务器每隔一小时自动运行这个服务器端脚本并检查过期的拍卖。间隔取决于应用程序的业务逻辑。对于这个项目,拍卖只能在每小时开始时结束或开始。这种方法比使用触发服务器脚本的 javascript 代码要好得多。一个原因是您不能信任客户端代码。黑客可能会访问该 javascript 文件并轻松修改它。你永远不应该让你的服务器代码依赖于你的客户端代码。

但是,请注意,我的方法并不是最理想的,因为根据您的数据库的拍卖数量,服务器脚本仍然需要时间来处理它,并且可能需要几秒钟到几分钟的时间来执行它。 例如,如果您有一些在 10:00:00 结束的拍卖,并且服务器脚本在 10:00:00 开始执行并且需要 40 秒来执行,那么用户可能会找到一种方法在这些拍卖中出价那40秒的间隔。您的客户端代码只应注意在 10:00:00 重置界面,以便用户无法出价。但是,您还应该确保处理您的 POST 出价请求的服务器端代码在继续之前还应该检查拍卖结束时间是否过去。如果它只检查拍卖的状态(打开或关闭),它可能会获得以状态设置为打开的状态结束的拍卖。原因是 cron 作业可能仍在处理拍卖并更改其状态。 另一种类似的方法是创建在操作系统级别(可能是 c 或 c++ 应用程序)上运行的服务,该服务将在后台持续运行并进行检查。 第一种方法的好处是大多数托管公司已经提供设置 cron 作业。一个例子是Bluehost。

要设置基于 Windows 的“cron 作业”,请阅读此 post 的附加信息

我希望这能让您更清楚如何处理拍卖。

【讨论】:

  • 感谢您的详细解释。你帮了我很多。我决定使用 node-cron。
猜你喜欢
  • 1970-01-01
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
相关资源
最近更新 更多