我正在使用来自两个网站(站点 1 => 我的应用程序 => 站点 2)的两个独立且不同的 API。从一个站点的 API 中提取(获取)数据并将数据发送(发布)到另一个站点。有一层同步 AKA “填补裂缝”(始终保持发送站点的数据与源镜像),以及一层非重复(确保站点 1 的数据集在站点 2 上没有重复条目)。
当用户通过一个简单的表单 POST 按钮引发“同步”时。可能需要将站点 1 中的数千个条目带入站点 2。执行此操作的简单低级方法是从站点 1 循环获取一组数据,在该循环中,我将有一个函数获取数据并将其发送到站点 2。当大规模工作时,这种循环肯定会失败或挂起几分钟,当页面退出时终止。
这是“低级/低技术”方式的示例。其中这个例子的每个部分都非常耗时。在一页/一个脚本上发生的所有操作,用户可以停止。该页面将是白色的、空白的,并且不是很用户友好。
// Get all of the data from site one
$siteOneDataNuggets = get_siteOne_data();
//Loop through all of site one's data
foreach($siteOneDataNuggets as $siteOneDataNugget){
//Post it to site two
post_siteTwo_data($siteOneDataNugget);
}
当有这样一个可能需要一段时间的过程时,我很想展示某种加载屏幕/栏。这样的事情也将如何实施。
我正在寻找一种编码哲学或标准方法来处理我的上述情况。想法和理论是我正在寻找的,不一定是代码示例。
我自己先入为主的选择。
这样做的另一种方法可能是让一个页面充当我可以请求的本地化“API”,每个页面都有自己的实例,$siteOneDataNugget
将逻辑分布在 1000 个页面而不是 1 个页面上。最有可能通过 ajax 提供加载栏/表示层来完成。
进度报告
我没有深入研究替代方案。从 PHP CURL 开始,当我发现加载需要几个小时(触发 4 分钟超时)时,我偶然发现了Jaisen Mathai在这篇博客文章中解释的 EpiCurl,它使用异步 curl 调用。它有它自己的局限性,我还没有克服。