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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                #### 10.3 鏈接屬性Zinx-V0.10單元測試 那么,接下來,我們簡單測試一下鏈接屬性的設置與提取是否可用。 > Server.go ```go package main import ( "fmt" "zinx/ziface" "zinx/znet" ) //ping test 自定義路由 type PingRouter struct { znet.BaseRouter } //Ping Handle func (this *PingRouter) Handle(request ziface.IRequest) { fmt.Println("Call PingRouter Handle") //先讀取客戶端的數據,再回寫ping...ping...ping fmt.Println("recv from client : msgId=", request.GetMsgID(), ", data=", string(request.GetData())) err := request.GetConnection().SendBuffMsg(0, []byte("ping...ping...ping")) if err != nil { fmt.Println(err) } } type HelloZinxRouter struct { znet.BaseRouter } //HelloZinxRouter Handle func (this *HelloZinxRouter) Handle(request ziface.IRequest) { fmt.Println("Call HelloZinxRouter Handle") //先讀取客戶端的數據,再回寫ping...ping...ping fmt.Println("recv from client : msgId=", request.GetMsgID(), ", data=", string(request.GetData())) err := request.GetConnection().SendBuffMsg(1, []byte("Hello Zinx Router V0.10")) if err != nil { fmt.Println(err) } } //創建連接的時候執行 func DoConnectionBegin(conn ziface.IConnection) { fmt.Println("DoConnecionBegin is Called ... ") //=============設置兩個鏈接屬性,在連接創建之后=========== fmt.Println("Set conn Name, Home done!") conn.SetProperty("Name", "Aceld") conn.SetProperty("Home", "https://www.jianshu.com/u/35261429b7f1") //=================================================== err := conn.SendMsg(2, []byte("DoConnection BEGIN...")) if err != nil { fmt.Println(err) } } //連接斷開的時候執行 func DoConnectionLost(conn ziface.IConnection) { //============在連接銷毀之前,查詢conn的Name,Home屬性===== if name, err:= conn.GetProperty("Name"); err == nil { fmt.Println("Conn Property Name = ", name) } if home, err := conn.GetProperty("Home"); err == nil { fmt.Println("Conn Property Home = ", home) } //=================================================== fmt.Println("DoConneciotnLost is Called ... ") } func main() { //創建一個server句柄 s := znet.NewServer() //注冊鏈接hook回調函數 s.SetOnConnStart(DoConnectionBegin) s.SetOnConnStop(DoConnectionLost) //配置路由 s.AddRouter(0, &PingRouter{}) s.AddRouter(1, &HelloZinxRouter{}) //開啟服務 s.Serve() } ``` 這里主要看`DoConnectionBegin()`和`DoConnectionLost()`兩個函數的實現, 利用在兩個Hook函數中,設置鏈接屬性和提取鏈接屬性。鏈接創建之后給當前鏈接綁定兩個屬性"Name","Home", 那么我們在隨時可以通過`conn.GetProperty()`方法得到鏈接已經設置的屬性。 ```bash $go run Server.go ``` ``` $go run Client0.go ``` 服務端: ```bash $ go run Server.go Add api msgId = 0 Add api msgId = 1 [START] Server name: zinx v-0.10 demoApp,listenner at IP: 127.0.0.1, Port 7777 is starting [Zinx] Version: V0.4, MaxConn: 3, MaxPacketSize: 4096 start Zinx server zinx v-0.10 demoApp succ, now listenning... Worker ID = 9 is started. Worker ID = 5 is started. Worker ID = 6 is started. Worker ID = 7 is started. Worker ID = 8 is started. Worker ID = 1 is started. Worker ID = 0 is started. Worker ID = 2 is started. Worker ID = 3 is started. Worker ID = 4 is started. connection add to ConnManager successfully: conn num = 1 ---> CallOnConnStart.... DoConnecionBegin is Called ... Set conn Name, Home done! [Writer Goroutine is running] [Reader Goroutine is running] Add ConnID= 0 request msgID= 0 to workerID= 0 Call PingRouter Handle recv from client : msgId= 0 , data= Zinx V0.8 Client0 Test Message Add ConnID= 0 request msgID= 0 to workerID= 0 Call PingRouter Handle recv from client : msgId= 0 , data= Zinx V0.8 Client0 Test Message Add ConnID= 0 request msgID= 0 to workerID= 0 Call PingRouter Handle recv from client : msgId= 0 , data= Zinx V0.8 Client0 Test Message read msg head error read tcp4 127.0.0.1:7777->127.0.0.1:55208: read: connection reset by peer Conn Stop()...ConnID = 0 ---> CallOnConnStop.... Conn Property Name = Aceld Conn Property Home = https://www.jianshu.com/u/35261429b7f1 DoConneciotnLost is Called ... connection Remove ConnID= 0 successfully: conn num = 0 127.0.0.1:55208 [conn Reader exit!] 127.0.0.1:55208 [conn Writer exit!] ``` 客戶端: ```bash $ go run Client0.go Client Test ... start ==> Recv Msg: ID= 2 , len= 21 , data= DoConnection BEGIN... ==> Recv Msg: ID= 0 , len= 18 , data= ping...ping...ping ==> Recv Msg: ID= 0 , len= 18 , data= ping...ping...ping ^Csignal: interrupt ``` 當我們終止客戶端鏈接,那么服務端在斷開鏈接之前,已經讀取到了conn的兩個屬性Name和Home
                  <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>

                              哎呀哎呀视频在线观看