swoft下的Swoole\WebSocket\Server类找不到了

环境使用的是docker。
安装完swoftcli后使用命令生成了 websocket 模块类,使用客户端连接后报错。

Swoft\Error\DefaultExceptionHandler:handle(27) DEFAULT HANDLER - TypeError(code:0): Argument 1 passed to App\WebSocket\ChatModule::onOpen() must be an instance of Swoole\WebSocket\Server, instance of Swoft\Http\Message\Request given, called in /var/www/swoft/vendor/swoft/websocket-server/src/Swoole/HandshakeListener.php on line 185 At /var/www/swoft/app/WebSocket/ChatModule.php line 59

中间没有自己改过文件,都是框架源码。
尝试了composer install ,无事发生。
又尝试把php的swoole扩展重新安装了一次,也没有得到解决。
是我有什么文件忘记装了吗?

已解决,感谢论坛,问题源于使用swoftcli创建的websocket类内onOpen方法为

 public function onOpen(Server $server,Request $request, int $fd): void
    {
        server()->push($fd, 'hello, welcome! :)');
    }

但是正确的方法应为

public function onOpen(Request $request, int $fd): void
    {
        server()->push($fd, 'hello, welcome! :)');
    }

由于IDE提示Swoole\WebSocket\Server是未定义的命名空间,所以错误的理解成了类未找到。

最佳答案

file
报错已经很好的说明你问题了,不是类找不到,是传参类型不对。

我给你简单翻译下:

参数1需要 必须 传入 Swoole\WebSocket\Server 类, 但是你传入的是 Swoft\Http\Message\Request


/var/www/swoft/app/WebSocket/ChatModule.php line 59

去看看你的 onOpen方法 为什么第一个参数传递的是 Swoft\Http\Message\Request

4年前 评论
讨论数量: 1

file
报错已经很好的说明你问题了,不是类找不到,是传参类型不对。

我给你简单翻译下:

参数1需要 必须 传入 Swoole\WebSocket\Server 类, 但是你传入的是 Swoft\Http\Message\Request


/var/www/swoft/app/WebSocket/ChatModule.php line 59

去看看你的 onOpen方法 为什么第一个参数传递的是 Swoft\Http\Message\Request

4年前 评论

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