websocket - 如何在 GO 的 websocket 中保持连接

标签 websocket go

我在服务器中使用 code.google.com/p/go.net/websocket,因此客户端可以从服务器获得通知。

但是,客户端连接到服务器后,如果客户端和服务器之间没有任何数据传输,服务器会在websocket.JSON.Receive()返回EOF错误,看起来像超时机制。

而且我在Google上搜索过,好像websocket协议(protocol)有一个ping-pong心跳来维持连接,我想问一下code.google.com/p/go。 net/websocket 是否支持此 ping 协议(protocol)?
如果我想保持客户端和服务器之间的连接,我该怎么办?

最佳答案

这是 gorilla/websocket 包的工作插件解决方案。

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.Since(lastResponse) > timeout) {
            c.Close()
            return
        }
    }
  }()
}

关于websocket - 如何在 GO 的 websocket 中保持连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23646910/

相关文章:

javascript - 用户套接字 ID 是关键信息吗? (安全 Angular )

concurrency - 这个chan是怎么泄露的?

go - 如何在 Go 中捕获编码错误?

go - 如何为接受 interface{} 的函数创建类型条件?

django - 与 Django Channels 的 React native Websocket 连接已打开,但没有消息通过

Node.js Websockets 套接字.IO

android - 使用带有 Node-RED 和 websocket 的 Bluemix 的项目 - 客户端是 Android 设备

websocket - Golang Server关闭客户端连接: websocket

go - 并发写入 websocket 连接

pointers - 在接收器方法中分配给 nil 指针