轮询来自第三方API的回调的状态

时间:2019-02-01 17:40:49

标签: php ajax callback

我正在尝试报告工作状态,该状态取决于第三方API,该API使用回调在完成时进行报告。

在API是Kraken的图像优化程序。 link

我现在的设置如下:

  1. main.php中,用户输入一些图像的几个URL,然后点击“提交”
  2. process.php发起ajax调用
  3. process.php针对每个图像向Kraken的API提交单独的作业,其中包括图像的URL以及回调文件名callback.php
  4. Kraken的API立即为每个图像(例如12345)返回唯一的作业编号
  5. (我需要弄清楚的部分)。当从Ajax调用,我不断地调查有关作业更新,显示进度给用户返回成功。

我不能使用wait选项,因为它提供了糟糕的用户体验,并且根据图像的数量和大小,API处理可能导致php作业超时。

这时,Kraken停止了压缩图像,几秒钟后,它完成了,并将结果连同作业号和压缩图像的URL发布到callback.php。像这样:

{
    "id": "18fede37617a787649c3f60b9f1f280d"
    "success": true,
    "file_name": "header.jpg",
    "original_size": 324520,
    "kraked_size": 165358,
    "saved_bytes": 159162,
    "kraked_url": "http://dl.kraken.io/18/fe/de/37617a787649c3f60b9f1f280d/header.jpg"
}

由于callback.php不了解$_SESSION变量,只有唯一的作业ID,您如何在main.php内轮询作业的完成情况?

当前想法

一旦我们从Kraken(或数据库表行)返回作业ID响应,立即创建一个以作业ID命名的临时文件。然后创建一个$_SESSION数组,其中包含每个作业ID的条目。

callback.php被触发时,它使用提供的作业号打开该临时文件并在该压缩图像的URL增添。同时,main.php具有js轮询机制,以查找对该临时文件的更新,当找到所需文件时,为该作业ID更新$_SESSION变量,并在{ {1}}(可能是新的图像URL,如果Kraken无法优化图像,则可能是错误消息)

0 个答案:

没有答案