As i am learning golang to work with Web socket and its connected as a client from golang but after connecting it, its not getting disconnect. So how can i close it?
func WebSocketClientGO() {
flag.Parse()
log.SetFlags(0)
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
u := url.URL{Scheme: "ws", Host: *addr, Path: "/ws/player/BHMb1QZoiQWcOVPxa7OMd0AUL"}
log.Printf("connecting to %s", u.String())
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
done := make(chan struct{})
go func() {
defer close(done)
for {
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
log.Printf("recv: %s", message)
}
}()
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for {
select {
case <-done:
return
case t := <-ticker.C:
err := c.WriteMessage(websocket.TextMessage, []byte(t.String()))
if err != nil {
log.Println("write:", err)
return
}
case <-interrupt:
log.Println("interrupt")
err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
c.Close()
if err != nil {
log.Println("write close:", err)
c.Close()
return
}
select {
case <-done:
log.Println("Done In For")
case <-time.After(time.Second):
log.Println("Done In For With Time")
}
return
}
}
}
This is response what i get but when i want to disconnect it it wont and it stuck so suggest me about this, i have find solutions but it wasn't working
connecting to ws://10.68.101.13:8061/ws/player/iHel5oWq9bTQC6lJpFwSRmIga
recv: {"code":500,"data":null,"message":"Internal Error","type":"ERROR"}
interrupt
read: read tcp 10.68.101.213:55709->10.68.101.13:8061: use of closed network connection
Done In For