首页 新闻 赞助 找找看

workerman的AsyncTcpConnection异步,为什么会有等待

0
悬赏园豆:100 [待解决问题]

workerman服务端

$task_worker = new Worker('Text://127.0.0.1:2345');
        // task进程数可以根据需要多开一些
        $task_worker->count = 100;
        $task_worker->name = 'server_worker';
        $task_worker->onMessage = function($connection, $task_data)
        {
            $task_data = json_decode($task_data, true);
            $type = $task_data['type'];
            if($type == "check_domain"){
                echo $task_data['domain'] . "\n";
                if($task_data['key'] == 0){
                    sleep(5); //第一条数据停留5秒
                }
                $connection->send("End");
            }else{
                $connection->send("未做任何处理");
            }
        };
        Worker::runAll();

workerman调用

for ($x=0; $x<= 50; $x++) {
   $task_data['key'] = $x;
   $task_connection = new AsyncTcpConnection('Text://127.0.0.1:2345');
   $task_connection->send(json_encode($task_data));

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

curl在调用的时候发现第一条数据等待了5秒才执行第二条,既然AsyncTcpConnection是异步的,即使写了sleep,也不应该用等待啊

痞子鱼的主页 痞子鱼 | 初学一级 | 园豆:99
提问于:2021-05-12 08:55
< >
分享
所有回答(1)
0

这个应该不是多线程的吧,AsyncTcpConnection 本身是IO异步非阻塞的,但是业务逻辑都是同步顺序执行的,执行应该还是单进程吧

guer | 园豆:204 (菜鸟二级) | 2021-05-12 20:48

嗯,我的需求是这样的,有100条数据,要循环请求接口,接口请求可能需要1~2秒,让它异步执行,应该怎么做呢。

支持(0) 反对(0) 痞子鱼 | 园豆:99 (初学一级) | 2021-05-22 20:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册