我code.google.com/p/go.net/websocket在服务器中使用,因此客户端可以从服务器获取通知.
但是,似乎客户端连接到服务器后,如果客户端和服务器之间没有任何数据传输,服务器将返回EOF错误websocket.JSON.Receive(),它看起来像一个超时机制.
而我在谷歌搜索,似乎websocket协议有一个乒乓球心跳维持连接,我想问一下是否code.google.com/p/go.net/websocket支持这个ping协议?
如果我想保持客户端和服务器之间的连接存活,我该怎么办?
小智 5
这是适用于大猩猩/ 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.Now().Sub(lastResponse) > timeout) {
c.Close()
return
}
}
}()
}
Run Code Online (Sandbox Code Playgroud)
就在 2013 年,go.net websocket 库还不支持(自动)保持活动消息。您有两个选择:
| 归档时间: |
|
| 查看次数: |
8872 次 |
| 最近记录: |