我正在开发一个iOS应用程序,我需要调用使用CodeIgniter开发的Web。问题是我很快得到了响应,但后来我需要在CodeIgniter中对它做一些操作。
我怎样才能在后台进行?
我的代码是这样的:
$data = json_decode($response);
echo $response;
//Data has around 100 rows
foreach ($data as $info)
{
//Database inserts and updates
}
如果我评论foreach,它的效果很好,但有了它,需要花费很多时间。
我不想加快数据库的速度,因为这不是问题......真正需要时间的是我需要对数据做些什么......
答案 0 :(得分:0)
您可以通过两种方式解决此问题。
创建一个cronjob以在main方法中执行耗时的任务,您只需要在发送响应后将作业表的enrty添加到后处理。所以响应不会等到所有处理完成。您还可以根据需要调度cronjob时间,具体取决于后期处理和服务器负载的紧急程度。
您可以使用CodeIgniter挂钩函数在将响应发送给调用者后进行处理。钩子方法将是" post_system"请在https://ellislab.com/codeigniter/user-guide/general/hooks.html
答案 1 :(得分:0)
您可以尝试以下类似操作
class Proc_test extends CI_Controller
{
public function index()
{
echo "Proc_text::Index is called at ".$this->rightnow()."<br>";
$param = 5000000;
$command = "php ".FCPATH."index.php tools proc1 $param > /dev/null &";
exec($command);
$command = "php ".FCPATH."index.php tools proc2 $param > /dev/null &";
echo "Proc_text::Index is done at ".$this->rightnow()."<br>";
}
//a helper to give time of day with microseconds
public function rightnow()
{
$time = microtime(true);
$micro_time = sprintf("%06d", ($time - floor($time)) * 1000000);
$date = new DateTime(date('Y-m-d H:i:s.'.$micro_time, $time));
return $date->format("H:i:s.u");
}
}
在这里按照以下示例执行后台命令。
$command = "php ".FCPATH."index.php tools proc1 $param > /dev/null &";
基本上是遵循此格式的cli命令 “ php绝对/路径/到/codeigniter/index.php控制器方法arguments_1 arguments_2 arguments_n>传递到null语句的管道”。