中间件

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

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

定义中间件

  1. <?php
  2. namespace Imi\Server\WebSocket\Middleware;
  3. use Imi\RequestContext;
  4. use Imi\Bean\Annotation\Bean;
  5. use Imi\Server\WebSocket\Message\IFrame;
  6. use Imi\Server\WebSocket\MessageHandler;
  7. use Imi\Server\WebSocket\IMessageHandler;
  8. /**
  9. * @Bean
  10. */
  11. class RouteMiddleware implements IMiddleware
  12. {
  13. /**
  14. * 处理方法
  15. *
  16. * @param IFrame $frame
  17. * @param IMessageHandler $handler
  18. * @return void
  19. */
  20. public function process(IFrame $frame, IMessageHandler $handler)
  21. {
  22. }
  23. }

全局中间件

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

局部中间件

注解使用

  1. <?php
  2. namespace ImiDemo\WebSocketDemo\MainServer\WSController\Index;
  3. use Imi\ConnectContext;
  4. use Imi\Controller\WebSocketController;
  5. use Imi\Server\Route\Annotation\WebSocket\WSRoute;
  6. use Imi\Server\Route\Annotation\WebSocket\WSAction;
  7. use Imi\Server\Route\Annotation\WebSocket\WSController;
  8. use Imi\Server\Route\Annotation\WebSocket\WSMiddleware;
  9. /**
  10. * 数据收发测试
  11. * @WSController
  12. */
  13. class Test extends WebSocketController
  14. {
  15. /**
  16. * test
  17. *
  18. * @WSAction
  19. * @WSRoute({"action"="login"})
  20. * @WSMiddleware(XXX::class)
  21. * @WSMiddleware({XXX::class,XXX2::class})
  22. * @return void
  23. */
  24. public function test($data)
  25. {
  26. }
  27. }

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