不使用中间件

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

监听写法

  1. <?php
  2. namespace ImiDemo\WebSocketDemo\MainServer\Listener;
  3. use Imi\Bean\Annotation\ClassEventListener;
  4. use Imi\Server\Event\Param\MessageEventParam;
  5. use Imi\Server\Event\Listener\IMessageEventListener;
  6. /**
  7. * 监听message事件,可以自己做处理
  8. * 如果不需要默认的处理方式,在配置文件中,把WebSocketDispatcher-middlewares下的中间件去除
  9. *
  10. * @ClassEventListener(className="Imi\Server\WebSocket\Server",eventName="message")
  11. */
  12. class OnMessage implements IMessageEventListener
  13. {
  14. /**
  15. * 事件处理方法
  16. * @param MessageEventParam $e
  17. * @return void
  18. */
  19. public function handle(MessageEventParam $e)
  20. {
  21. // 如果服务器名不是主服务器就返回
  22. if('main' !== $e->getTarget()->getName())
  23. {
  24. return;
  25. }
  26. var_dump($e->frame->data);
  27. // $e->server->getSwooleServer()->push($e->frame->fd, '返回信息');
  28. }
  29. }