我天真地使用
_,err := ws.Read(msg)在我的代码中保持一个Web套接字.我不认为它可靠地工作.
在其他代码中,我注意到有人在做一个sleep loop.什么是正确的方式来保持一个Web插槽打开&稳定?我假设底层图书馆做乒乓球?
更新:我非常有信心client.go是责怪的,因为在服务器上看到断开连接后似乎没有重拨.我做了a video demonstrating the issue.
我错读了你的原始问题.
不,你马上就这样做了.你基本上需要阻止处理程序的返回来保持websocket连接的活着.如果你不在乎消息,只要丢弃它并且不做任何事情.
人们常用的方式是拥有专门的读写goroutine,如:
@H_301_13@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 }