<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>

                # 封裝器路由器原理剖析 首先HTTP不需要封裝器。 消息通過客戶端發出流到服務器控制器中需要經歷以下過程。 客戶端->封裝器(PACK)->中間件(MIDD)->路由器(ROUTE) 反之服務器要發送消息需要通過下面過程 服務器->封裝器(PACK)->客戶端 SD的封裝器和路由器可以在不同端口上配置,所以SD可以做到不同端口不同協議,但是業務代碼是統一的,框架會自動轉換正確的協議。 ## 封裝器 封裝器主要進行協議頭封裝和數據的序列化和反序列化過程。 框架提供的封裝器有: * EofJsonPack * NonJsonPack * LenJsonPack * MqttPack 其中Json是指序列化工具使用的是json,Eof代表協議頭是EOF類型的,Len代表協議頭是LEN類型的,參考 [Swoole編程指南-EOF協議](Swoole編程指南-EOF協議.md) [Swoole編程指南-固定包頭協議](Swoole編程指南-固定包頭協議.md) 而Non是指沒有協議頭封裝,這個適用于WebSocket,因為websocket有自帶的協議封裝,不需要我們畫蛇添足。 Pack中有4個主要函數: * encode 添加協議頭 * decode 移除協議頭 * pack 序列化后添加協議頭 * unPack 移除協議頭后反序列化 如果需要自定義封裝器可以參考框架提供的幾種。 同時可以參考這篇文章 [物聯網自定義協議](物聯網自定義協議.md) ## 路由器 框架僅僅提供了一個NormalRoute路由器,路由器會拿到封裝器unPack后的結果,請注意這里NormalRoute需要的是一個stdClass并不是一個數組類型。如果需要是數組類型的,需要自定義Route和Pack。 * handleClientData 傳遞給路由器unPack后的結果,并驗證下是否合適 * getControllerName 獲取控制器名 * getMethodName 獲取方法名 NormalRoute通過getControllerName和getMethodName方法處理unPack后數據中的值并返回正確的框架可以識別的Controller名稱和對應的方法名。 **ControllerName為Controllers文件夾中文件的名稱** **MethodName為Controller類中public標識的方法名** * getParams 獲取參數必須為數組類型 如果getParams提供了返回值,將會作為控制器method的參數 * errorHandle Route任何地方拋出異常都會調用,可以在這里關閉連接。 下面介紹的是HTTP用到的函數 * handleClientRequest 處理HTTP請求設置client_data供getControllerName和getMethodName使用。 * errorHttpHandle Route任何地方拋出異常都會調用,可以在這里輸出結果或者重定向。(僅僅HTTP) **HTTP一般結合中間件完成整個流程,比如NormalHttpMiddleware將在Route處理前完成靜態內容的指定,和一些特殊情況的處理**
                  <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>

                              哎呀哎呀视频在线观看