0

我正在使用来自两个网站(站点 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 调用。它有它自己的局限性,我还没有克服。

4

1 回答 1

0

我在这个方面领先于我的时间。我所做的真的很愚​​蠢,我向我的服务器发出了数千个 AJAX 请求,这些请求做了一些动作。我应该做的是使用 WebSockets / socket.io 这样我就可以在客户端和服务器之间进行某种双向通信,并且能够处理批量操作和进度条。

在提出这个问题时,两者都处于起步阶段。

于 2016-04-07T23:52:20.027 回答