关于我正在工作的网站的信息:
足球现场比分相关网站
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秒。此部分与是否仅当用户(前端正在请求)时拉取无关。即使没有用户在线,它也应该做好它的工作。
那么,我的问题是,什么是最好的,最有效的,最完整的方式来实时提取API数据,并将其保存在Redis中,直到匹配完成?(查看接口数据即可了解匹配状态示例:{match_id{ status : finished}}xxxx)因为匹配完成后,我会将Redis推送到数据库中。
第2部分:从数据库(或Redis)实时发布数据。这个对我来说比第一部分简单,我已经找到了通过pusher和socket.io实时发布->数据的方法。但除此之外,在我的场景中最好的方法是什么?另外,如果我必须使用Redis+ Laravel广播的组合,我是否需要任何JS库?
谢谢你的建议!
发布于 2019-08-09 02:32:09
第1部分的可能答案:
我会使用Task Scheduling来->daily();或->hourly();一个Artisan Console命令,以检查下一场足球比赛是什么时候,并在matches表中写入一条记录,或者在开始/结束时间发生变化时更新现有记录。
每隔几秒执行一次的->cron('* * * * *');上的另一个控制台命令(更改为所需的秒数)可以检查matches表;如果当前时间在匹配的starts_at和ends_at之间,则检索实时数据。
为了防止同时多次执行命令(如果由于某种原因,API调用需要更长的时间),可以使用Symfony的Lockable Trait。
https://stackoverflow.com/questions/57398085
复制相似问题