不使用中间件

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

监听写法

  1. <?php
  2. namespace Imi\Server\TcpServer\Listener;
  3. use Imi\App;
  4. use Imi\ConnectContext;
  5. use Imi\RequestContext;
  6. use Imi\Bean\Annotation\ClassEventListener;
  7. use Imi\Server\Event\Param\ReceiveEventParam;
  8. use Imi\Server\Event\Listener\IReceiveEventListener;
  9. use Imi\Server\TcpServer\Message\ReceiveData;
  10. /**
  11. * Receive事件前置处理
  12. * @ClassEventListener(className="Imi\Server\TcpServer\Server",eventName="receive",priority=PHP_INT_MAX)
  13. */
  14. class BeforeReceive implements IReceiveEventListener
  15. {
  16. /**
  17. * 事件处理方法
  18. * @param ReceiveEventParam $e
  19. * @return void
  20. */
  21. public function handle(ReceiveEventParam $e)
  22. {
  23. // 如果服务器名不是主服务器就返回
  24. if('main' === $e->server->getName())
  25. {
  26. return;
  27. }
  28. var_dump($e->data);
  29. }
  30. }