php - 实时拉取API数据并发布
问题描述
关于我正在工作的网站的信息:
与足球实时比分相关的网站
API 提供足球比分的实时数据(他们没有 webhook)
我想要的是:
想在前端传递实时分数
另外,我想暂时将这些数据保存在 Redis 中,并且在比赛结束后,想从 Redis 推送到数据库。
最好不要使用任何外部 JS 库(http://socket.io)、推送器等。Laravel 广播+ 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 部分的可能答案:
我会使用任务调度->daily();
或Artisan 控制台命令来检查下一场足球比赛的时间并在表中写入记录->hourly();
,或者更新现有记录以防开始/结束时间发生变化。matches
每隔几秒钟执行一次的另一个控制台命令->cron('* * * * *');
(更改为所需的秒数)可以检查matches
表;如果当前时间在starts_at
和之间ends_at
,则检索实时数据。
为了防止同时执行多个命令(如果由于某种原因 API 调用需要更长的时间),可以使用Symfony 的Lockable Trait 。
推荐阅读
- reactjs - 为什么我们需要 NextJS 中的 next-redux-wrapper?为什么要在服务器上使用 redux 存储?
- python - 当输入形状不同时,keras 中的迁移学习
- javascript - 如何用javascript隐藏类
- shell - Unix shell 脚本:日期格式语法
- android - Webview 谷歌登录不显示设备上的帐户
- google-apps-script - 如何将静态时间戳脚本 Google 工作表循环到所有工作表
- nginx - uwsgi 可以使用“真实”IP 运行吗?
- angular - 仅在首次登录时隐藏文本
- python-3.x - 如何定义给定函数的输入必须是类的变量(静态)
- r - R:如何在特定假设下将年度数据更改为月度数据?