有关我正在工作的网站的信息:
与足球实时比分相关的网站
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库?
谢谢您的建议!
答案 0 :(得分:0)
第1部分的可能答案
我将使用Task Scheduling到->daily();
或->hourly();
的{{3}}命令来检查下一场足球比赛的时间,并将记录写在matches
表中,或在开始/结束时间更改的情况下更新现有记录。
每隔几秒钟执行一次的->cron('* * * * *');
上的另一个控制台命令(更改为所需的秒数)可以检查matches
表;如果当前时间在比赛的starts_at
和ends_at
之间,则获取实时数据。
为防止命令的多次执行(如果由于某种原因,API调用花费了更长的时间),可以使用Symfony的Artisan Console。