我正在制作一个有自动出价系统的拍卖网站。该系统允许人们在不必在场的情况下进行投标。
我的问题是如何实施这样一个系统。我已经制作了php文件,一切准备就绪,我已经创建了一个每秒都刷新的html页面。它有效,但我想知道是否有更好的解决方案。
我尝试的第二个选项是创建一个每隔一秒打开网页的java应用程序。这消耗了“很多”内存/ CPU。另外,我认为某处存在内存泄漏。
我在带有centOS和Plesk的专用linux服务器上运行此应用程序,所以我确信有很多替代方案。
例如:
每分钟执行一次php文件的cronjob,其中php文件在睡眠时循环一分钟。
一个循环播放1秒的php文件。
一个cronjob在一秒钟后执行并安排另一个cronjob。
MySQL调度程序,但我不知道如何实现它,我听说它会锁定数据库用于其他写入。
我也听说过cli,perl,python脚本,但我对它们中的任何一个都不熟悉。
请有任何了解这些选项的人请就此问题为我提供一些启示。我正在寻找最适合速度和内存使用的解决方案。
如果有人有其他替代解决方案,我也很高兴听到这个。
答案 0 :(得分:2)
创建一个以给定时间间隔执行相关PHP脚本的cron作业。如果以与上下文无关的方式编写(不需要访问$_GET
,$_POST
等),您可以execute the PHP script from the command line。
答案 1 :(得分:2)
每一秒都是如此小的间隔,cronjobs不是一个选项,我强烈建议不要使用“网页”,因为性能很重要只是为CLI编写的脚本才会这样做。
我要做的是:
无论如何,您需要非常小心让每个周期后脚本都处于睡眠状态,否则您将关闭数据库。
另一方面,您真的需要每秒执行一次吗?在我看来,自动出价是由事件触发的,即有人在剩下10秒时出价超过你。这听起来好多了,而且资源密集程度更低(你也可以在那里使用守护进程,监听自动出价事件,但这是另一个故事:)
答案 2 :(得分:1)
好吧,您可以尝试某种“基于事件的发布”,这基本上意味着一旦将数据插入数据库,就会触发某些事情发生。
例如,MySQL触发甚至是一个简单的PHP脚本,即ON INSERT以获得新的出价,您可以检查是否有其他人的最高出价高于该出价。
如果他们这样做,则更新新的最高出价和当前最高出价者。
如果有多个竞价者,您可能需要进行循环,看看谁将获得最高出价。
关键是你不应该真正跑来跑去做预定的工作来解决这个商业问题。我建议你使用触发器或事件。
答案 3 :(得分:0)
如果您已有一个执行该作业的页面,则可以安排每分钟调用curl命令的cron(curl http://your/page.php)。唯一需要注意的是,如果从外面调用它,你可能需要保护你的页面,如果这是一个问题。