中间件

开发者可以开发中间件类,对整个TCP请求和响应过程进行自定义处理。

注意!最好不要在中间件中使用类属性,可能会造成冲突!

定义中间件

  1. <?php
  2. namespace Imi\Server\TcpServer\Middleware;
  3. use Imi\Bean\Annotation\Bean;
  4. /**
  5. * @Bean
  6. */
  7. class RouteMiddleware implements IMiddleware
  8. {
  9. /**
  10. * 处理方法
  11. *
  12. * @param IReceiveData $data
  13. * @param IReceiveHandler $handle
  14. * @return void
  15. */
  16. public function process(IReceiveData $data, IReceiveHandler $handler)
  17. {
  18. }
  19. }

全局中间件

  1. return [
  2. 'beans' => [
  3. // 中间件
  4. 'TcpDispatcher' => [
  5. 'middlewares' => [
  6. // 中间件
  7. \Imi\Server\Tcp\Middleware\RouteMiddleware::class,
  8. ],
  9. ],
  10. ],
  11. ];

局部中间件

注解使用

  1. <?php
  2. namespace ImiDemo\TcpDemo\MainServer\Controller;
  3. use Imi\ConnectContext;
  4. use Imi\Server\Route\Annotation\Tcp\TcpRoute;
  5. use Imi\Server\Route\Annotation\Tcp\TcpAction;
  6. use Imi\Server\Route\Annotation\Tcp\TcpController;
  7. /**
  8. * 数据收发测试
  9. * @TcpController
  10. */
  11. class Test extends \Imi\Controller\TcpController
  12. {
  13. /**
  14. * 登录
  15. *
  16. * @TcpAction
  17. * @TcpRoute({"action"="login"})
  18. * @TcpMiddleware(XXX::class)
  19. * @TcpMiddleware({XXX::class,XXX2::class})
  20. * @return void
  21. */
  22. public function login($data)
  23. {
  24. }
  25. }

如上代码,同时支持设置单个和多个中间件