<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                # 中間件 [TOC] SD框架引入了中間件過程,消息的傳遞流程如下。 >message->pack->middleware1(before)->middleware2(before)->...->route->controller->...->middleware2(after)->middleware1(after) ## SD自帶的中間件 ### Middleware 中間件最基礎的類,開發中間件繼承Middleware。 * before_handle 中間件before過程 * after_handle 中間件after過程 * interrupt 中斷中間件 ### HttpMiddleware http使用的基礎中間件。一般開發http中間件請繼承HttpMiddleware,提供了常用的命令。 ### NormalHttpMiddleware 這個中間件是提供給Http使用的,它具備的功能是提供了默認主頁,404頁面,文件后綴查詢。 ``` $config['ports'][] = [ 'socket_type' => PortManager::SOCK_HTTP, 'socket_name' => '0.0.0.0', 'socket_port' => 8081, 'route_tool' => 'NormalRoute', 'middlewares' => ['MonitorMiddleware', 'NormalHttpMiddleware'] ]; ``` 在ports配置中請務必攜帶NormalHttpMiddleware。 ### MonitorMiddleware 效率中間件,將記錄接口的運行時間,并寫入日志。 ## 配置 中間件作用于每一個端口配置,也就是說不同的端口可以單獨配置中間件。 中間件的執行嚴格按照數據的順序執行。 ``` $config['ports'][] = [ 'socket_type' => PortManager::SOCK_HTTP, 'socket_name' => '0.0.0.0', 'socket_port' => 8081, 'route_tool' => 'NormalRoute', 'middlewares' => ['MonitorMiddleware', 'NormalHttpMiddleware'] ]; ``` 如上圖執行順序為MonitorMiddleware(before)->NormalHttpMiddleware(before)->...->NormalHttpMiddleware(after)->MonitorMiddleware(after). ## 注意 before流程中只要有一個中間件調用了interrupt方法,那么后續的中間件都不會被執行。 after流程中會忽略interrupt。 ## interrupt 一旦在before階段觸發了interrupt,那么將跳過Route,Controller的處理直接進入after的操作。 ## before 可以在after階段修改信息流。 比如NormalHttpMiddleware中就修改了request中的值,導致后續的路由發生改變。 ``` if (is_string($index)) { $www_path = $this->getHostRoot($host) . $this->getHostIndex($host); $result = httpEndFile($www_path, $this->request, $this->response); if (!$result) { $this->redirect404(); } else { $this->interrupt(); } } elseif (is_array($index)) { $this->request->server['path_info'] = "/" . implode("/", $index);//這里修改了request的值 } else { $this->redirect404(); } ``` ## after after一般用于統計,比如MonitorMiddleware的作用就是統計各個接口的執行信息,并寫入日志。 ## context 貫穿整個流程的context,是個上下文,context在整個流程中共享。任意一個地方修改context都會影響到整個流程。 可以通過context給后續流程傳遞信息。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看