hyperf使用websocket,servers和路由都是按照官方配置,没有启作用,有使用过的吗?这儿应该怎么处理
<?php
declare(strict_types=1);
namespace App\Controller\webSocket;
use Hyperf\Contract\OnCloseInterface;
use Hyperf\Contract\OnMessageInterface;
use Hyperf\Contract\OnOpenInterface;
use Hyperf\Engine\WebSocket\Frame;
use Hyperf\Engine\WebSocket\Opcode;
use Swoft\WebSocket\Server\Message\Response;
use Swoole\Server;
use Swoole\WebSocket\Server as WebSocketServer;
class WebSocketController implements OnMessageInterface, OnOpenInterface,OnCloseInterface
{
public function onMessage($server, $frame): void
{
$response = (new Response($server))->init($frame);
if($frame->opcode == Opcode::PING) {
// 如果使用协程 Server,在判断是 PING 帧后,需要手动处理,返回 PONG 帧。
// 异步风格 Server,可以直接通过 Swoole 配置处理,详情请见 https://wiki.swoole.com/#/websocket_server?id=open_websocket_ping_frame
$response->push(new Frame(opcode: Opcode::PONG));
return;
}
$response->push(new Frame(payloadData: 'Recv: ' . $frame->data));
}
public function onClose($server, int $fd, int $reactorId): void
{
var_dump('closed');
}
public function onOpen($server, $request): void
{
$response = (new Response($server))->init($request);
$response->push(new Frame(payloadData: 'Opened'));
}
}