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

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                #### 9.4 注冊鏈接啟動/停止自定義Hook方法功能 有的時候,在創建鏈接的時候,希望在創建鏈接之后、和斷開鏈接之前,執行一些用戶自定義的業務。那么我們就需要給Zinx增添兩個鏈接創建后和斷開前時機的回調函數,一般也稱作Hook\(鉤子\)函數。 我們可以通過Server來注冊conn的hook方法 > zinx/ziface/iserver.go ```go type IServer interface{ //啟動服務器方法 Start() //停止服務器方法 Stop() //開啟業務服務方法 Serve() //路由功能:給當前服務注冊一個路由業務方法,供客戶端鏈接處理使用 AddRouter(msgId uint32, router IRouter) //得到鏈接管理 GetConnMgr() IConnManager //設置該Server的連接創建時Hook函數 SetOnConnStart(func (IConnection)) //設置該Server的連接斷開時的Hook函數 SetOnConnStop(func (IConnection)) //調用連接OnConnStart Hook函數 CallOnConnStart(conn IConnection) //調用連接OnConnStop Hook函數 CallOnConnStop(conn IConnection) } ``` > zinx/znet/server.go ```go //iServer 接口實現,定義一個Server服務類 type Server struct { //服務器的名稱 Name string //tcp4 or other IPVersion string //服務綁定的IP地址 IP string //服務綁定的端口 Port int //當前Server的消息管理模塊,用來綁定MsgId和對應的處理方法 msgHandler ziface.IMsgHandle //當前Server的鏈接管理器 ConnMgr ziface.IConnManager // ======================= //新增兩個hook函數原型 //該Server的連接創建時Hook函數 OnConnStart func(conn ziface.IConnection) //該Server的連接斷開時的Hook函數 OnConnStop func(conn ziface.IConnection) // ======================= } ``` 實現添加hook函數的接口和調用hook函數的接口 ```go //設置該Server的連接創建時Hook函數 func (s *Server) SetOnConnStart(hookFunc func (ziface.IConnection)) { s.OnConnStart = hookFunc } //設置該Server的連接斷開時的Hook函數 func (s *Server) SetOnConnStop(hookFunc func (ziface.IConnection)) { s.OnConnStop = hookFunc } //調用連接OnConnStart Hook函數 func (s *Server) CallOnConnStart(conn ziface.IConnection) { if s.OnConnStart != nil { fmt.Println("---> CallOnConnStart....") s.OnConnStart(conn) } } //調用連接OnConnStop Hook函數 func (s *Server) CallOnConnStop(conn ziface.IConnection) { if s.OnConnStop != nil { fmt.Println("---> CallOnConnStop....") s.OnConnStop(conn) } } ``` 那么接下來,需要選定兩個Hook方法的調用位置。 一個是創建鏈接之后: > zinx/znet/connection.go ```go //啟動連接,讓當前連接開始工作 func (c *Connection) Start() { //1 開啟用戶從客戶端讀取數據流程的Goroutine go c.StartReader() //2 開啟用于寫回客戶端數據流程的Goroutine go c.StartWriter() //================== //按照用戶傳遞進來的創建連接時需要處理的業務,執行鉤子方法 c.TcpServer.CallOnConnStart(c) //================== } ``` 一個是停止鏈接之前: > zinx/znet/connection.go ```go //停止連接,結束當前連接狀態M func (c *Connection) Stop() { fmt.Println("Conn Stop()...ConnID = ", c.ConnID) //如果當前鏈接已經關閉 if c.isClosed == true { return } c.isClosed = true //================== //如果用戶注冊了該鏈接的關閉回調業務,那么在此刻應該顯示調用 c.TcpServer.CallOnConnStop(c) //================== // 關閉socket鏈接 c.Conn.Close() //關閉Writer c.ExitBuffChan <- true //將鏈接從連接管理器中刪除 c.TcpServer.GetConnMgr().Remove(c) //關閉該鏈接全部管道 close(c.ExitBuffChan) close(c.msgBuffChan) } ```
                  <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>

                              哎呀哎呀视频在线观看