2 回答
TA贡献2019条经验 获得超9个赞
golang.org/x/net/websocket 没有实现 RFC 6455 中的 ping-pong,但是 gorilla websocket实现了。Gorilla websocket 的最小示例
c := time.Tick(pingInterval)
go func(){
for _ := range c {
if err := conn.WriteControl(Ping...); err != nil {
handle error
}
}
}()
-----
conn.SetPongHandler(func(string) error { return conn.SetReadDeadline(time.Now().Add(pingInterval)) })
go func(){
for {
if _, _, err := conn.NextReader(); err != nil {
handle error
}
}
}()
TA贡献1795条经验 获得超7个赞
我误读了你原来的问题。
不,你马上就做。您基本上需要阻止处理程序返回以保持 websocket 连接活动。如果您不关心该消息,只需将其丢弃并且不对其进行任何处理。
一种常见的方式人们做的是有一个专门的Read和Write够程,是这样的:
func fishHandler(ws *websocket.Conn) {
id := ws.RemoteAddr().String() + "-" + ws.Request().RemoteAddr + "-" + ws.Request().UserAgent()
sockets[id] = ws
go writePump(ws)
readPump(ws)
}
func readPump(ws *websocket.Conn) {
defer ws.Close()
msg := make([]byte, 512)
_, err := ws.Read(msg)
if err != nil {
return
}
}
func writePump(ws *websocket.Conn) {
// Hand the write messages here
}
- 2 回答
- 0 关注
- 219 浏览
添加回答
举报