实时提取API数据并发布

时间:2019-08-07 15:45:18

标签: php laravel redis socket.io

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

与足球实时比分相关的网站

API提供足球比分的实时数据(没有网络响声)

我想要什么:

想在前端提供实时评分

此外,我想将数据临时保存在Redis中,比赛结束后,我想从Redis推送到数据库中。

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

部分问题:

第1部分:将外部API数据提取到数据库(或Redis)。 ->到目前为止,我设法将数据从API提取到数据库的唯一方法是,我创建了一条路由,该路由将触发从外部API加载数据。再说一次,到目前为止,这是没有用的,因为API中的实时比分数据几乎每秒都会更新,到目前为止,我只需要触发路由(或每秒刷新URL)即可从API中提取数据。同样,不要忘记,将API数据完全传输到数据库至少需要2-3秒。本部分不取决于是否仅在用户(前端正在请求)时才拉。即使有0个在线用户,它也应尽其职责。

所以,我的问题是实时提取API数据并将其保存到Redis直到比赛结束的最佳,最有效和完整的方法是什么? (我们可以通过检入API数据示例来了解比赛状态:{match_id {status:完成}} xxxx)。因为比赛结束后,我会将Redis推送到数据库。

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

谢谢您的建议!

1 个答案:

答案 0 :(得分:0)

第1部分的可能答案

我将使用Task Scheduling->daily();->hourly();的{​​{3}}命令来检查下一场足球比赛的时间,并将记录写在matches表中,或在开始/结束时间更改的情况下更新现有记录。

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

为防止命令的多次执行(如果由于某种原因,API调用花费了更长的时间),可以使用Symfony的Artisan Console