我正在尝试报告工作状态,该状态取决于第三方API,该API使用回调在完成时进行报告。
在API是Kraken的图像优化程序。 link
我现在的设置如下:
main.php
中,用户输入一些图像的几个URL,然后点击“提交” process.php
发起ajax调用process.php
针对每个图像向Kraken的API提交单独的作业,其中包括图像的URL以及回调文件名callback.php
我不能使用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无法优化图像,则可能是错误消息)