php - 实时拉取API数据并发布

标签 php laravel redis socket.io

关于我正在工作的网站的信息:

与足球比分相关的网站

API 提供足球比分的实时数据(他们没有 webhooks)

我想要的:

想在前端传递实时比分

另外,我想把数据暂时保存在Redis中,比赛结束后,想从Redis推送到数据库。

最好不要使用任何外部 JS 库(http://socket.io)、推送器等。Laravel Broadcasting+ Redis 是我的首选方式,因为我不需要加载推送器或套接字 js 代码。

部分问题:

第 1 部分:将外部 API 数据拉取到数据库(或 Redis)。 --> 到目前为止,我设法将数据从 API 提取到数据库的唯一方法是,我创建了一个路由,它将触发从外部 API 加载数据。同样,到目前为止,这毫无用处,因为 API 中的实时比分数据几乎每秒更新一次,到目前为止,我需要触发路由(或每秒刷新 URL)才能从 API 中提取数据。另外,不要忘记,将 API 数据完全传输到数据库至少需要 2-3 秒。此部分不依赖于是否仅在用户(前端请求)时拉取。即使有 0 个用户在线,它也应该完成它的工作。

那么,我的问题是,实时拉取 API 数据并将其保存在 Redis 中直到比赛结束的最佳、最有效和最完整的方法是什么? (我们可以通过查看 API 数据示例了解匹配状态:{match_id{status: finished}}xxxx)。因为比赛结束后,我会将Redis推送到数据库。

第 2 部分:从数据库(或 Redis)实时发布数据。 -> 好吧,这个对我来说比第 1 部分要容易得多,我已经找到了通过 pusher 和 socket.io 实时发布 Redis 数据的方法。但除此之外,在我的场景中最好的方法是什么?另外,如果我必须使用 Redis+ Laravel 广播的组合,是否需要任何 JS 库?

感谢您的建议!

最佳答案

第 1 部分的可能答案:

我会使用 Task Scheduling->daily();->hourly(); Artisan Console用于检查下一场足球比赛何时开始并在 matches 表中写入记录的命令,或者在开始/结束时间发生变化时更新现有记录。

->cron('* * * * *'); 上的另一个控制台命令(更改为所需的秒数)每隔几秒执行一次可以检查 匹配 表;如果当前时间在比赛的 starts_atends_at 之间,则检索实时数据。

为了防止命令的多次执行(如果由于某种原因 API 调用需要更长的时间),Symfony 的 Lockable Trait可能会用到。

关于php - 实时拉取API数据并发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57398085/

相关文章:

php - 如何在 laravel 的 cookie 上设置安全标志

php - 上次事件存储的用途和优点 - session 管理

php - 对于每个类别行产品

c# - Redis - 在给定的日期时间范围内点击计数跟踪和查询

ruby-on-rails - 无法在 vagrant 上运行 sidekiq

windows - 为什么 Windows 系统不适合(生产模式)Key/Value DB

javascript - 表格没有列 - Google Charts - PHP AJAX

php - Laravel 5 - 在 header 而不是 JSON 中对结果进行分页

php - 拉维尔 5.5 : Authorization Policy AccessDeniedHttpException This action is unauthorized

php - Laravel 全局范围与关系