gpt4 book ai didi

php - 用于检索现场体育比分的 Cron 设置

转载 作者:可可西里 更新时间:2023-11-01 13:24:26 25 4
gpt4 key购买 nike

我正在开发一款移动应用程序,用于显示英超联赛的实时比分。当比赛开始时,我想每 30 秒查询一次外部 API 以检索最新的比分。大多数比赛在周六 3pm 开始,但有些比赛在 12.45pm 开始,其他比赛在 1.30pm2pm 开始周日 3pm 最晚 8pm

我的数据库中有一张表,其中包含本赛季的所有赛程和它们开始的时间。

所以我猜我需要一个在 12.458pm 之间每 15 分钟运行一次的 cron(游戏永远不会在这些时间之外开始) 检查我的数据库以查看游戏是否正在开始。然后,如果有一场比赛开始,另一个 cron 必须开始,每 30 秒查询一次外部 API 以获取该比赛的最新分数。此 cron 将运行大约 1 小时 45 分钟

实现这种 cron 设置的最佳方法是什么?我在一台运行着 Plesk 软件的共享服务器上,但没有服务器的 ssh 访问权限。

最佳答案

根据您的一条评论判断

the main problem is I'm on a shared server with no ssh access...

我认为这里的问题是您无权访问命令 shell,只能使用 Plesk 将文件呈现到服务器。因此,要呈现您的解决方案,您将使用 cron 作业。

在那种情况下,我会建议您与您的托管服务提供商仔细核对您可以运行的 cron 作业数量/cron 作业允许的最低频率的任何限制。如果对 cron 作业的处理有限制,您可以使用在线 cron 调度程序(如 this )。请注意,外部 cron 服务只允许访问可公开访问的 url,因此您需要相应地编写和部署代码。

从今以后,我将假定您的 cron 作业正在运行并且没有任何问题。

When a game starts, I want to query an external API every 30 seconds to retrieve the latest scores. Most games start at 3pm on a saturday, but some start at 12.45pm, others at 1.30pm, 2pm and 3pm on Sundays and some during the week at the latest time of 8pm.

方法一

使用单个 updateMatchesAndScores.php 文件更新任何新比赛的比赛信息(在数据库中标记为事件/关闭),并更新当前事件比赛的分数。

Cron 作业无法处理这种逻辑,如果匹配打开然后才运行它,该逻辑必须转到脚本。

然后您可以从 12-10 PM 运行它,如下所示

* 12-22 * * * php -f updateMatchesAndScores.php
* 12-22 * * * sleep 30 && php -f updateMatchesAndScores.php

在 url http://some.server.address.com/updateMatchesAndScores 的情况下,这变成了

* 12-22 * * * wget http://some.server.address.com/updateMatchesAndScores
* 12-22 * * * sleep 30 && wget http://some.server.address.com/updateMatchesAndScores

您可以将其分解为多个 cron 作业(12.45-12.5913:00-20:5921:00-21:45 code>) 假设游戏发生在时间范围 [12.45, 21:45]。这将优化 12.00-12.45 等不必要的运行。

方法二

使用一次性 cron 作业启动守护进程一次,然后每分钟检查它是否仍在运行。

让我们调用脚本 updateMatchesAndScores.php。将 sleep 功能放入其中 (1) 如果没有游戏,则 15 分钟 (2) 如果在此有任何游戏,则放置 30 秒 (3) 从 21:46 到第二天 12:44 sleep 。您可以为每个游戏生成一个单独的子进程,这样您就不必在此脚本中实现 (2) 每 30 分钟休眠一次。

注意事项 - (1) 脚本的执行时间将开始稍微延迟代码,因此 15 分钟很快就会变成 15 分钟 x 秒 (2) 有一个最大执行时间在 php 中,因此您必须相应地设置它 (3) 根据您的代码质量,可能会有内存泄漏对您造成轻微影响。

此处的优化可能是每天使用 cron 作业运行该过程(在最后一场比赛结束后停止 - 无论是 21:46 还是 4:30)和 restart it因此,如果尚未运行。

关于php - 用于检索现场体育比分的 Cron 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19686263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com