小编sey*_*ulu的帖子

Yii框架中的PHP异步方法调用

我想知道是否有可能在操作呈现视图时从其中一个操作异步调用Yii控制器方法,让方法完成长时间运行的操作.我很乐意做类似下面的代码,我不需要返回结果my_long_running_func.

public function actionCreate() {
    $model = new Vacancies;
    if (isset($_POST['Vacancies'])) {
        $model->setAttributes($_POST['Vacancies']);
        $model->save();
        //I wish :)
        call_user_func_async('my_long_running_func',$model);
    }
    $this->render('create', array( 'model' => $model));
}
Run Code Online (Sandbox Code Playgroud)

问题

我试图在Yii写一个控制器动作,发布空缺并通知感兴趣的订阅者.问题是执行通知查询需要很长时间.

现在我正在寻找一种异步运行查询的方法,以便海报在尽可能短的时间内查看他的响应,而查询在后台以类似于C#委托或事件的方式运行.

我GOOGLE了解决方案进行异步请求(一个或多个)控制器动作的过程中,但所有我想做的是异步运行控制器的方法和行动不得不等待,直到请求(S)已经完成.

尝试

我尝试了以下方法,但对于大约1500个用户的测试数据,查询仍然很慢.

  • Yii ActiveRecord

    if ($vacancy->save()) {                
        if($vacancy->is_active == 1) {
            $url = Yii::app()->createUrl('vacancies/view',array('id'=>$model->id));
            $trainees = YumUser::getUsersByRole('Trainees');
            if($trainees!=null) {
                foreach($trainees as $trainee){
                    $message = new YumMessage;
                    $message->from_user_id = Yii::app()->user->id;
                    $message->title = 'Vacancy Notification: '.date('M j, Y');
                    $message->message = "A new vacancy has …
    Run Code Online (Sandbox Code Playgroud)

php mysql events asynchronous yii

10
推荐指数
1
解决办法
4267
查看次数

标签 统计

asynchronous ×1

events ×1

mysql ×1

php ×1

yii ×1