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是未定义的命名空间,所以错误的理解成了类未找到。
报错已经很好的说明你问题了,不是类找不到,是传参类型不对。
我给你简单翻译下:
参数1需要
必须
传入Swoole\WebSocket\Server
类, 但是你传入的是Swoft\Http\Message\Request
/var/www/swoft/app/WebSocket/ChatModule.php line 59
去看看你的
onOpen
方法 为什么第一个参数传递的是Swoft\Http\Message\Request
类