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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                #### 8.4 Zinx-V0.8代碼實現 好了,現在需要將消息隊列和多任務worker機制集成到我們Zinx的中了。我們在Server的`Start()`方法中,在服務端Accept之前,啟動Worker工作池。 > zinx/znet/server.go ```go //開啟網絡服務 func (s *Server) Start() { //... //開啟一個go去做服務端Linster業務 go func() { //0 啟動worker工作池機制 s.msgHandler.StartWorkerPool() //1 獲取一個TCP的Addr addr, err := net.ResolveTCPAddr(s.IPVersion, fmt.Sprintf("%s:%d", s.IP, s.Port)) if err != nil { fmt.Println("resolve tcp addr err: ", err) return } //... //... } }() } ``` 其次,當我們已經得到客戶端的連接請求過來數據的時候,我們應該將數據發送給Worker工作池進行處理。 所以應該在Connection的`StartReader()`方法中修改: > zinx/znet/connection.go ```go /* 讀消息Goroutine,用于從客戶端中讀取數據 */ func (c *Connection) StartReader() { fmt.Println("Reader Goroutine is running") defer fmt.Println(c.RemoteAddr().String(), " conn reader exit!") defer c.Stop() for { // 創建拆包解包的對象... //讀取客戶端的Msg head... //拆包,得到msgid 和 datalen 放在msg中... //根據 dataLen 讀取 data,放在msg.Data中... //得到當前客戶端請求的Request數據 req := Request{ conn:c, msg:msg, } if utils.GlobalObject.WorkerPoolSize > 0 { //已經啟動工作池機制,將消息交給Worker處理 c.MsgHandler.SendMsgToTaskQueue(&req) } else { //從綁定好的消息和對應的處理方法中執行對應的Handle方法 go c.MsgHandler.DoMsgHandler(&req) } } } ``` 這里并沒有強制使用多任務Worker機制,而是判斷用戶配置`WorkerPoolSize`的個數,如果大于0,那么我就啟動多任務機制處理鏈接請求消息,如果=0或者&lt;0那么,我們依然只是之前的開啟一個臨時的Goroutine處理客戶端請求消息。
                  <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>

                              哎呀哎呀视频在线观看