我在服务器中使用 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/