webman - 处理任务

evilk

在webman中,处理任务,分两种情况
1.不需要得到任务结果的
这种情况,可以用队列去处理,客户端执行扔进队列操作后,会立即返回,不会阻塞业务进程

2.需要得到任务结果的
这种情况,参考自定义进程处理,如果任务耗时较长,此时会阻塞业务进程

参考过 在workerman中异步任务,但文档中,是在workerman中调用的(worker/onMessage中使用)

尝试在webman/controller/action中

public function task()
    {
        // 与远程task服务建立异步连接,ip为远程task服务的ip,如果是本机就是127.0.0.1,如果是集群就是lvs的ip
        $task_connection = new AsyncTcpConnection('tcp://127.0.0.1:8889');
        // 任务及参数数据
        $request = [
            'class'   => 'app\service\User',
            'method'  => 'get',
            'args'    => [100], // 100 是 $uid
        ];
        // 发送数据
        $task_connection->send(json_encode($request));

        // 异步获得结果
        $task_connection->onMessage = function($task_connection, $task_result)
        {
            // 结果
            var_dump($task_result);
            // 获得结果后记得关闭异步连接
            $task_connection->close();
//            // 通知对应的websocket客户端任务完成
//            $ws_connection->send('task complete');
        };
        // 执行异步连接
        $task_connection->connect();
    }

无法得到$task_result结果,看不到打印的结果

1.如果在一次http请求中,需要执行一个繁重任务,耗时10秒
2.在业务进程中,将此任务扔给任务进程处理
3.需要得到任务处理结果
4.不阻塞业务进程(处理此次http请求的进程)

在webman中,应该如何操作?

3083 0 1
0个回答

年代过于久远,无法发表回答
🔝