<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] http://localhost:8081/TestController/test 以上代碼會先在/app/Controllers目錄下尋找TestController控制器,如果沒有再去/Server/Controllers目錄下尋找,如果依舊沒有找到將返回404界面。 test是方法名,默認前綴名為‘http_’,可以通過修改ports.php配置設置不同端口的前綴。 所以以上url會訪問到/Server/Controllers下的TestController控制器的http_test方法并輸出helloworld。 ```php <?php class TestController extends Controller { /** * http測試 */ public function http_test() { $this->http_output->end('helloworld',false); } } ``` ## 多級路由 默認的NormalRoute支持多級路由 http://localhost:8081/V1/TestController/test 可以在app/Controllers目錄下添加V1目錄,這樣上面的URL將訪問V1目錄下的TestController類中的test方法。 可以添加更多級的文件夾。 ## 自定義路由 自定義路由需要實現以下幾個方法 ```php interface IRoute { function handleClientData($data); function handleClientRequest($request); function getControllerName(); function getMethodName(); function getParams(); function getPath(); function errorHandle(\Throwable $e, $fd); function errorHttpHandle(\Throwable $e, $request, $response); } ``` 1.(僅僅TCP)handleClientData 設置反序列化后的數據 Object 2.(僅僅HTTP)handleClientRequest 處理http request 3.getControllerName 獲取控制器名稱 4.getMethodName 獲取方法名稱 5.(僅僅HTTP)getPath 獲取url_path 6.(僅僅TCP)getParams 獲取參數/擴展 解析錯誤的回調 ```php function errorHandle(\Throwable $fd) ``` 注意getParams是作為一個擴展,如果這里被返回了參數,那么這個參數會被直接當做調用Controller方法的傳入參數。 ```php class ProtoController extends Controller { public function makeMessageData(AbstractMessage $responseMessage) { //這里的$responseMessage就是getParams()獲取到的對象 } } ``` ## 自定義協議配置 route 舉例 和 Pack 中的例子對應, 將不同 `msg_type` 的消息分發到控制器中不同的方法下 ```php namespace Server\Route; use Server\CoreBase\SwooleException; class GameRoute implements IRoute { // 其他方法都可以保持不變 /** * 獲取控制器名稱 * @return string */ public function getControllerName() { return 'GameController'; } /** * 獲取方法名稱 * @return string */ public function getMethodName() { $methodName = 'ping'; $msgType = $this->client_data->msg_type; if ($msgType == 2) { $methodName = 'pong'; } return $methodName. 'Msg'; } } ``` 這樣, 不同類型的消息就分發到 `GameController` 下的對應 `method`, 使用 `$this->client_data` 即可獲取到 `unpack` 后的數據
                  <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>

                              哎呀哎呀视频在线观看