laravel-s 实现websocket客户端 swoole 自定义进程 $process-read() 阻塞

问题描述

自定义进程创建websoket客户端,while (true)维护与websoket服务端的连接。
外部输入订阅信息到进程,$process->read()阻塞,看资料read()是可以异步的,不知道可不可以解决这个问题。
新手小白,莫笑。

Swoole版本,PHP版本,以及操作系统版本信息

swoole 4.5.3 / php7.4.8 / Ubuntu 20.04

public static function callback(Server $swoole, Process $process)
    {
        do {
            try {
                if (empty(self::$websocket)) {
                    SaberGM::default(['exception_report' => 0, 'upgrade' => '/', 'ssl' => 1, 'ssl_verify_peer' =>  true, 'use_pool' => true]);
                    self::$websocket = SaberGM::websocket(self::$stream);
                    echo '创建websocket'.PHP_EOL;
                }
                $recv = self::$websocket->recv();// timeout'
                if (empty($recv->finish)) continue;
                $responseData = json_decode(self::gzdecode($recv), true);
                echo json_encode($responseData) .PHP_EOL;
                if (isset($responseData['ping'])) {
                    self::$websocket->push(self::getPong($responseData['ping']));
                    echo self::getPong($responseData['ping']).PHP_EOL;
                }
                if (!$responseData) continue;
                // TODO 接收数据进行订阅
                $process->read(); //阻塞了
                } catch (\Exception $e) {
                echo 'websocket error:'.$e->getMessage().'|'.$e->getLine().PHP_EOL;
                    self::$websocket = null;
                    Coroutine::sleep(10);
                    continue;
                }
            } while (true);
    }

期待的结果

能够异步接收数据

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!