目录

不使用中间件

优质
小牛编辑
130浏览
2023-12-01

imi中内置实现了中间件+控制器方式开发websocket,在一些场景也可以选择不使用,直接监听服务器的message事件,进行手动处理。

监听写法

<?php
namespace ImiDemo\WebSocketDemo\MainServer\Listener;

use Imi\Bean\Annotation\ClassEventListener;
use Imi\Server\Event\Param\MessageEventParam;
use Imi\Server\Event\Listener\IMessageEventListener;

/**
 * 监听message事件,可以自己做处理
 * 如果不需要默认的处理方式,在配置文件中,把WebSocketDispatcher-middlewares下的中间件去除
 * 
 * @ClassEventListener(className="Imi\Server\WebSocket\Server",eventName="message")
 */
class OnMessage implements IMessageEventListener
{
    /**
     * 事件处理方法
     * @param MessageEventParam $e
     * @return void
     */
    public function handle(MessageEventParam $e)
    {
        // 如果服务器名不是主服务器就返回
        if('main' !== $e->getTarget()->getName())
        {
            return;
        }
        var_dump($e->frame->data);
        // $e->server->getSwooleServer()->push($e->frame->fd, '返回信息');
    }
}