3

我正在制作一个具有自动出价系统的拍卖网站。这个系统让人们无需到场就可以出价。

我的问题是如何实施这样的系统。我已经制作了 php 文件,一切都准备好了,我制作了一个每秒刷新的 html 页面。它有效,但我想知道是否有更好的解决方案。

我尝试的第二个选项是制作一个每秒打开网页的 Java 应用程序。这会消耗“大量”内存/CPU。另外,我认为某处存在内存泄漏。

我正在使用 centOS 和 Plesk 的专用 linux 服务器上运行此应用程序,因此我确信有很多替代方案。

例如:

  1. 一个每分钟执行一个 php 文件的 cronjob,其中 php 文件循环一分钟并休眠。

  2. 一个循环 1 秒的 php 文件休眠。

  3. 一个 cronjob 在一秒钟后执行并安排另一个 cronjob。

  4. MySQL调度程序,但我不知道如何实现它,我听说它会锁定数据库以进行其他写入。

  5. 我也听说过 cli、perl、python 脚本,但我对它们都不熟悉。

请对这些选项有任何了解的人可以为我提供一些关于这个主题的信息。我正在寻找最适合速度和内存使用的解决方案。

如果有人有另一种替代解决方案,我也很乐意听到。

4

4 回答 4

2

创建一个以给定时间间隔执行相关 PHP 脚本的 cron 作业。如果PHP 脚本是以与上下文无关的方式编写的(不需要访问和类似的),则可以从命令行执行 PHP 脚本。$_GET$_POST

于 2009-11-10T10:06:47.790 回答
2

每一秒都是一个如此小的间隔,以至于不能选择 cronjobs,我也强烈建议不要按原样使用“网页”,因为性能很重要,只需为 CLI 编写的脚本就可以了。

我要做的是:

  • 当有人激活自动出价时,您应该在数据库中注册。
  • 创建一个守护程序,它会轮询数据库以获取当时要执行的条目。

不管是谁,您都需要非常小心地让脚本在每个周期后休眠,否则您将关闭数据库。

附带说明一下,您真的需要每秒执行一次吗?在我看来,自动出价是由事件触发的,即在还剩 10 秒时有人出价高于你。这听起来更好实施并且资源密集度更低(您也可以在那里使用守护程序,监听自动出价事件,但这是另一回事:)

于 2009-11-10T10:41:07.223 回答
1

好吧,您可以尝试某种“基于事件的发布”,这基本上意味着一旦将数据插入数据库,它就会触发一些事情发生。

举个例子,MySQL 触发器甚至是一个简单的 php 脚本在插入新出价时,您检查是否有其他人设置了高于该出价的最高出价。
如果他们这样做了,则更新新的最高出价和当前最高出价者。

如果有多个投标人,您可能需要做一个循环,看看谁将获得最高出价。

关键是你不应该跑来跑去做预定的工作来解决这个业务问题。我建议您使用触发器或事件。

于 2009-11-10T17:46:57.073 回答
0

如果您已经有一个可以完成这项工作的页面,您可以安排一个每分钟调用一次 curl 命令的 cron(curl http://your/page.php)。唯一需要注意的是,如果从外部调用它,您可能需要保护您的页面,如果这是一个问题。

于 2009-11-10T10:08:44.870 回答