How to keep connection alive in GO's websocket

前端 未结 2 1717
被撕碎了的回忆
被撕碎了的回忆 2021-02-04 13:59

I use code.google.com/p/go.net/websocket in server, so client can get notification from server.

however, It seems after client connected to server, if the

2条回答
  •  星月不相逢
    2021-02-04 14:19

    Here's working drop-in solution for gorilla/websocket package.

    func keepAlive(c *websocket.Conn, timeout time.Duration) {
        lastResponse := time.Now()
        c.SetPongHandler(func(msg string) error {
           lastResponse = time.Now()
           return nil
       })
    
       go func() {
         for {
            err := c.WriteMessage(websocket.PingMessage, []byte("keepalive"))
            if err != nil {
                return 
            }   
            time.Sleep(timeout/2)
            if(time.Now().Sub(lastResponse) > timeout) {
                c.Close()
                return
            }
        }
      }()
    }
    

提交回复
热议问题